Parte 2 – Smarty PHP

2. Smarty PHP para programadores PHP

Agora vou entrar em mais detalhes técnicos, como instalar, configurar e sair usando.

2.1 Instalação

Primeiro baixe a ultima versão do smarty, descompacte todas as pastas. Eu crio dentro
da minha aplicação uma pasta smarty onde tem que ter a pasta libs para funcionar corretamente o smartyPHP.

2.2 Organizando a casa

  /            - raiz, onde estarão os seus aplicativos em php
  /cache       - caso queira aplicar cache na sua aplicação esta é a pasta onde ficará o arquivo de cache (chmod 755)
  /configs     - pasta onde ficará os arquivos de configurações, do tipo, nome do site(title) entre outras coisas.
  /templates   - pasta onde o WebDesigner vai trabalhar, mais propriamente dito como o diretório dos templates (HTML's)
  /templates_c - pasta onde o ficará a compilação do template + php, onde o proprio smarty irá gerar os arquivos ali listados. (chmod 755)

2.3 Configuração básica
Vou mostrar de uma forma mais complexa/simples para que depois o desenvolvimento do site funcione mais tranquilamente, fez uma vez nao
há necessidade de alterar tudo novamente.
«---- config.php ----»

// Diretório onde vão estar as bibliotecas do smarty
define(SMARTY_DIR,'/sitepedidos/smarty/libs/');
// Biblioteca do smarty
require_once(SMARTY_DIR.'Smarty.class.php');

/* Função de construção do objeto
Setando alguns parametros para o smartyPHP
caching -> habilitando o cache
cache_lifetime -> tempo de vida do cache
compile_check -> sempre antes de compilar para a tela ele faz uma checagem dos fontes
debugging -> mostra ao WebDesigner as variáveis que ele poderá utilizar
*/
function Smarty_Site() {
$sBasedir = '/sitepedidos/';
$this->Smarty();
$this->template_dir = $sBasedir."templates/";
$this->compile_dir = $sBasedir."templates_c/";
$this->cache_dir = $sBasedir."cache/";
$this->config_dir = $sBasedir."configs/";
$this->caching = false;
$this->cache_lifetime = 0;
$this->compile_check = true;
$this->debugging = true;
}

/* Função de display, melhor dizendo o relacionamento entre o TPL e o PHP */
function show(){
preg_match('/^(.*)\.php$/', basename($_SERVER['SCRIPT_FILENAME']), $r);
$tela = $r[1];
$this->assign('tela', $tela.".tpl");
$this->display('fixo/site.tpl'); // Vou utilizar o site.tpl como a cara do site, mais para frente eu explico melhor.
}
}

// Criação do objeto e pronto para ser utilizado.
$smarty =new Smarty_Site();

Agora que já fizemos o nosso arquivo de configuração para o smarty funcionar, vamos fazer o nosso primeiro index.php

«---- index.php ----»

require_once('./config.php');

// Declaracao das variaveis para o webDesigner
$smarty->assign('nome','Rafael Stoever');

$smarty->show();

Feito isso, temos que falar com o nosso webdesigner para ele fazer o template(HTML).
«---- index.tpl (este arquivo vai ficar dentro da pasta templates) ----»

Este é o meu nome: {$nome}

Ah e tem um cara que é o principal, o que nao muda nunca, o site.tpl, esse site.tpl que está configurado lá no nosso config.php é o corpo do site, aquela parte que nunca muda.

«---- index.tpl ----»

 


{include file=$tela}

E ai está agora conforme o arquivo.php ele vai dar um include no arquivo.tpl ao mesmo tempo que fizeres um php vais programar um template para este.
Simples ? se tiver dúvidas soh comentar.



Conspiração no desenvolvimento WEB/Desktop

Bom como estou sumido, resolvi colocar alguns artigos mostrando como desenvolver um site muito rapidamente separando os mundos da programação PHP do WebDesign. Ah e no final vou dar uma palhinha sobre tudo isso com acesso a qualquer banco de dados e AJAX com Bando de dados também, já que muitos tem duvidas sobre isso.

Quem for lendo esse artigo e os próximos, vão ver que no final não vão querer mais trabalhar sozinhos, ou melhor vão querer se especializar em uma unica atividade e claro nao vao querer largar do smarty+php+db+ajax hehehehe.

1. Um pouco de teoria
2. Smarty PHP para programadores PHP
3. Smarty PHP para WebDesigner´s
4. Integrando os dois mundos (WebDesigner+Programador)
5. Exemplo de página com acesso ao qualquer banco de dados (usando packages da PEAR.php.net)
6. Exemplo de página com AJAX consultando banco de dados e com o smarty.

1. Um pouco de teoria

O que é Smarty?

Tomando a definição do próprio site oficial (smarty.php.net), temos que Smarty é um sistema de templates para PHP, fornecendo uma maneira fácil de controlar a separação da aplicação lógica e o conteúdo de sua apresentação.
O principal objetivo de se utilizar a arquitetura MVC* é a de separar a lógica da aplicação (as regras de negócio do seu programa), da interface do usuário (as telas do programa) e do fluxo da aplicação (como são enviadas as mensagens dos eventos e para quem).

Mas porque eu teria um trabalho enorme em separar meu sistema nessas três camadas?

Quem vem acompanhando os meus post´s já notaram que sou um viciado em PHP :) e que podemos fazer milhões de coisas com essa ferramenta, entao vamos pensar um pouco mais.
Tenho uma empresa que desenvolve sites para web/intranet e tenho uma equipe de pelo menos duas pessoas, um programador PHP e um webdesigner. Ai pegamos um projeto de um site de pedidos, coisa simples:

a. controle de login de clientes
b. alteracao de cadastro de clientes
c. cadastro de produtos
d. cadastro de pedidos
e. listagem de pedidos
f. manutencao de pedidos

Ok um programador PHP faz tudo isso sozinho na boa sem precisar do webdesigner, mas agora pensem assim vc programador PHP só fazer o php sem se preocupar com o layout e nenhum código HTML, tah até agora nada disso eh muito visivel, com o desenrolar do artigo e seus tópicos vou argumentando algumas idéias de como tudo isso irá facilitar no nosso dia a dia. Voltando para o projetinho, ok foi feito em smarty o site para web; a empresa gostou começou a ter mais agilidade nas vendas dos seus produtos e viu que esse site comecou a ficar lento pois está hospedado fora da empresa e tudo mais, agora quizeram colocar o webserver dentro da propria empresa, contrataram mais funcionarios para atender essas solicitações, então quer dizer que o seu cliente CRESCEU, com sua ajuda. Podemos agora para agilizar fazer uma intranet com menos imagem(aquela coisa toda para web) deixar as telas mais limpas e objetivas, já q será somente os funcionarios da empresa q estaram fazendo a manutencao naqueles pedidos e clientes. Entramos na jogada novamente, ufaaaa ganhar mais uma graninha hehehe.
Oh maravilha, fizemos o site com smarty PHP, entao quer dizer as regras de negócio já estão feitas o programador PHP nao vai ter q refazer todos aquele acesso ao banco de dados, select´s e validacoes, nada... e sim alguns ajustes, e quem vai ter q trabalhar nesse caso eh o WebDesigner isso o programador de TELA(HTML) melhor dizendo tirando os frufrú das páginas e fazendo uma intranet reutilizando as variáveis que o programador PHP já havia feito e bingo a intranet está feita.
Agora vão me perguntar, e o programador PHP nao ganha nada nessa historia? bom pensamos que ele pode estar empenhado já em outro projeto e ganhando bem mais, e claro ele vai trabalhar um pouco nesse pequeno, mas nao vai mais se preocupar em pegar aqueles detalhezinhos do tipo, se o cliente for do SUL dar um desconto de 50% e o restante deixar normal, ah essas pecuinhas, o sistema já vai estar pronto para isso.
Tah e se nao tiver outro trabalho para o programador PHP, tipo ele está precisando ganhar R$, bom cara, vai estudar outra coisa, aperfeicoar para pegar mais mercado, uma dica eh estudar PHP-GTK, pois quem sabe depois esse mesmo projeto não vai cair numa loja e dai web/intranet são lentos para isso, o que melhor se encaixa eh uma aplicação DESKTOP, e o mais legal que no desktop vc vai se preocupar com o visual, pois a regra, lembra? já está feito.

Nossa entao vamos agora para a prática, já que um breve da teoria do nosso cotidiano já foi +/- explicado.

Não desanimem, estou escrevendo o próximo artigo, mais técnico.
2. Smarty PHP para programadores PHP ....

*MVC: Model View Controler


Segurança com PHP

Segurança Em um forum de discussao um colega abordou a questao de segurança usando PHP nos aplicativos web, em geral e ele menciona que os maiores culpados por invasões entre outros é o programador PHP, nao somente o aplicativo da php.net. Claro tens seus defeitinhos e tals, mas se todos vissem na documentação e conhecesse esses sites que identificam quais versões que tem vulnerabilidades e o que fazer ou melhor nao fazer para que isso prejudique os seus clientes/servidor e tudo envolvido pelo aplicativo.

Bom a integra do artigo pode ser consultado aqui (SecurityFocus).

E para quem quer saber das vulnerabilidades que o PHP ou outro Software tem pode consulta na SecurityFocus que há listas de discução sobre o problema, soluções a tomar, entre outros detalhes.

Dicas sobre segurança para o PHP: Principais falhas de Segurança no PHP, Segurança em código PHP, Enganando o lammer .php -> .aspx


Vídeo palestra sobre PHP-GTK2

Não pude ir, mas pelo visto foi show mesmo... gostei!


Recuperar IMG do MySQL e transf. thumb´s

Estava vendo num forum de PHP apareceu a seguinte aplicação, de como recuperar uma imagem de dentro do banco, no exemplo asseguir é recurar do MySQL, e de outros bancos é mto semelhante, farei um teste mais p/ frente em um Oracle, mas por enquanto lá vai o código:

  1. <br />
  2. public function resizepics($filename,$newwidth, $newheight){

list($width, $height) = getimagesize($filename);
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($thumb);
}

public function mostraImg($conexao){

$query = mysql_query("SELECT * FROM tabela m",$conexao) or die ("Erro: ". mysql_error());

if($linhas = mysql_num_rows($query)== 1){
$registro = mysql_fetch_array($query);
$filename= $registro['imagem'];
$tempfile = fopen($filename, "w+");
fwrite($tempfile, mysql_result($query, 0, 'imagem'));
fclose($tempfile);
echo $this -> resizepics($filename, '76', '100');
unlink($filename);
} else {
$filename= 'img/NaoDisponivel.jpg';
imagejpeg($this -> LoadJpeg($filename));
}
}

public function LoadJpeg($imgname) {

$im = @imagecreatefromjpeg($imgname); /* Abrindo imagem */
if (!$im) { /* Se correto então gera imagem */
$im = imagecreate(76,100); /* Criando nova imagem*/
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 76, 100, $bgc);
/* Erro na geração da imagem */
imagestring($im, 1, 5, 5, "Erro na geração da imagem.".$imgname, $tc);
}
return $im;

}

Fonte: Jáder Tavares (Forum de PHP-pt)