Artigo/Tutorial do Gerson sobre Smarty [parte 1]
Buenas,
Este artigo/tutorial tem como objetivo apresentar o Smarty e ensinar a sua utilização em várias situações. Acredito que o presente seja bem extenso portanto devo dividi-lo em partes. Espero que gostem.
O título deste artigo/Tutorial não seria este, entretanto, conversando com JuniorZ sobre postagens aqui no php-Espírito Santo, entramos na questão “muita quantidade de artigos/tutoriais sobre um determinado assunto na internet” e eu comentei, que não vejo problema, mesmo porque, nenhum destes é de minha autoria… neste ponto JuniorZ me sugeriu, em tom de brincadeira, o título “Tutorial do Gerson sobre Smarty”. E eu como bom brincalhão, achei interessante e adotei.
Antes de começar eu sugiro a todos os interessados uma leitura no Prefácio da documentação do Smarty, eis o caminho http://www.smarty.net/manual/pt_BR/preface.php .
Vou apenas retirar alguns parágrafos ou parte destes para exemplificar a famosa pergunta: “Porque utilizar Smarty em minhas aplicações/projetos?”
“… como eu faço meus scripts em PHP independentes do layout?…”
“…em muitas empresas os papéis de designer e programador são separados …”
“… Após a documentação necessária estar pronta, o designer faz o esboço da interface e entrega ao programador. O programador implementa as regras de negócio no PHP e usa o esboço da interface para criar o esqueleto dos templates. O projeto então está nas mãos da pessoa responsável pelo layout HTML da página que então transforma o esboço em um layout realmente funcional. O projeto talvez vá e volte entre programação/designer HTML várias vezes. Porém, é importante ter um bom suporte à templates porque os programadores não querem ter que ficar mexendo com HTML e não querem que os designers estraguem seus códigos PHP. Os designers precisam de ajuda para alterar os arquivos de configuração, blocos dinâmicos e outros problemas relacionados à interface usada, mas eles não querem ocupar-se com as complexidades da linguagem de programação PHP. … “
“… Analisando muitas das soluções de templates disponíveis para PHP hoje em dia, a maioria somente disponibilizada uma forma rudimentar de substituição de variáveis dentro dos templates e trabalham de forma limitada com as funcionalidades dos blocos dinâmicos…”
Diante do exposto, vem a pergunta, “O que é Smarty?”
Smarty:
Smarty é um sistema de templates para PHP, fornecido em forma de classe. Utilizando Smarty é possível realizar a separação de código PHP e código HTML, tornando o projeto de aplicações muito mais produtivo facilitando o entendimento entre Designer e programador. O Smarty foi projetado pensando em uma característica do PHP, a velocidade. Muitos dos sistemas de templates encontrados na web acabam por transformar uma aplicação lenta apenas para separar PHP e HTML devido a maneira como foram projetadas. O Smarty não, com o Smarty é possível escrever aplicações complexas sem alterar relativamente a sua velocidade final.
Características do Smarty:
Mais uma vez vou transplantar do site oficial do smarty, vejam algumas características:
Algumas das características do Smarty:
Ele é extremamente rápido.
Ele é eficiente visto que o interpretador do PHP faz o trabalho mais pesado.
Sem elevadas interpretações de template, apenas compila uma vez.
Ele está atento para só recompilar os arquivos de template que foram mudados.
Você pode fazer funções próprias e seus próprios modificadores de variáveis, assim a linguagem de templates é extremamente extensível.
Delimitadores de tag configuráveis, sendo assim você pode usar {}, {{}}, , etc.
Os construtores if/elseif/else/endif são passados para o interpretador de PHP, assim a sintaxe de expressão {if …} pode ser tanto simples quanto complexa da forma que você queira.
Aninhamento ilimitado de sections, ifs, etc. permitidos.
É possível embutir o código PHP diretamente em seus arquivos de template, apesar de que isto pode não ser necessário (não recomendado) visto que a ferramenta é tão customizável.
Suporte de caching embutido.
Fontes de template arbitrários.
Funções de manipulação de cache customizadas.
Arquitetura de Plugin.
Instalação:
Não irei entrar em detalhes quanto a instalação do Smarty, mesmo porque é simples.
Acesse: http://www.smarty.net/download.php e faça o download da última versão disponível(Latest Stable Release), quando este artigo foi escrito estávamos com a versão 2.6.22.
Após o download da instalação, descompacte o arquivo e dê uma boa olhada em sua arquitetura de diretórios. Note que temos o diretório ‘libs/’, este é o diretório necessário para utilizarmos o smarty, obrigatoriamente você deve sempre possuir uma cópia deste diretório ou dos arquivos nele contido,em um local onde a suas aplicações que utilizaram o Smarty possam enxerga-los.
Eis a lista de arquivos contidos no diretório ‘libs/’:
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/
/plugins/
Lembre-se a sua aplicação precisa enxergar os arquivos deste diretório.
Devo avisa-los que este artigo não irá tratar de comandos da linguagem PHP e sim de métodos da classe Smarty.
Ok, Agora vamos a parte boa… a utilização.
Utilizando o Smarty
Primeiro precisamos incluir o arquivo ‘Smarty.class.php’, para isso utilizaremos o seguinte código:
require_once('Smarty.class.php');
Depois precisamos instanciar a classe Smarty, utilizando o seguinte código:
$objSmarty = new Smarty();
Você pode utilizar qualquer nome para a instância da classe, eu particularmente gosto de utilizar o prefixo obj nas variáveis para identificar que se tratam de uma instância de objeto, seguido do nome do objeto ou parte dele. No nosso exemplo então, temos o $objSmarty como sendo o nosso objeto.
Caso seja apresentado um erro dizendo que Smarty.class.php não pode ser encontrada, você precisará informar a constante SMARTY_DIR que recebe o caminho de onde o Smarty foi instalado.
Como disse sua aplicação precisa enxergar o Smarty. Vamos tentar corrigir o problema ![]()
pra isso utilizaremos o define do PHP para criar a constante SMARTY_DIR e informar o caminho manual de onde encontra-se o arquivo.
define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
Vejamos como está o nosso script até o momento:
//necessário apenas caso o arquivo Smarty.class.php não seja encontrado. define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/'); //inclui a classe Smarty require_once('Smarty.class.php'); //Instancia o objeto Smarty $objSmarty = new Smarty();
Agora você já está pronto à utilizar o Smarty, para exemplificar e já começarmos com uma explicação, vamos fazer um pequeno teste de instalação. Agora com o Smarty, esqueça de fazer <?=$variavel?> dentro de um arquivo HTML. você agora trabalha com Smarty e pode simplesmente separar HTML e PHP agilizando sua programação e facilitando no debug de scripts.
Vamos sempre precisar de 2 arquivos, um que eu chamo de módulo e o outro que chamaremos de template. O arquivo de módulo, seria o nosso script .php propriamente dito, contendo toda a nossa conexão com banco, tomadas de decisão loops e demais, e o outro arquivo o nosso template ou “front end” como alguns gostam de chamar. Neste último devemos salvar com a extensão .tpl padrão para templates, mas é possível alterar na clase Smarty esse padrão, não irei abordar esta tarefa neste artigo, qualquer coisa deixa um post que explico como fazer.
meuPrimeiroTemplate.tpl
<div>Data de hoje: {$dataDeHoje}</div>Eu não estou aqui para explicar HTML certo?, mas vamos entender o que são estes {$titulo} e {$dataDeHoje}. Para os mais observadores é fácil, trata-se de variáveis que serão substituídas por valores originados no módulo(.php). Pois bem, nós programadores diremos o que deve aparecer no templete onde temos estas variáveis, sempre entre chaves { }.
Alguns podem estar se perguntando, tá, mas onde no templete vai aparecer?, sempre que o Smarty encontrar o nome da variável ele irá substitui-la por seu valor, definido no módulo que chamou o template (vejamos como chamar mais adiante). Ficando a critério do Designer onde mostrar o Título e a data de hoje
Vamos agora escrever nosso módulo e chamar o template criado à cima.
meuPrimeiroTemplate.php
//inclui a classe Smarty require_once('Smarty.class.php'); //Instancia o objeto Smarty $objSmarty = new Smarty(); //Informa para o Smarty qual arquivo de template ele deve “ligar” com este módulo $objSmar->display('meuPrimeiroTemplate.tpl');
Repare o método display, este método deve ser utilizado para informar ao Smarty qual arquivo de template ele deve usar para “vincular” a este módulo, no nosso caso será o meuPrimeiroTemplate.tpl.
Você poderá utilizar este método a qualquer momento no seu módulo, por exemplo, se em uma tomada de decisão if qualquer, o módulo se comporte de maneira diferente basta trocar a template que será vinculado.
Rodando o script como está, notaremos que o Smarty vai mostrar o meu template, mas não terá valor nenhum nas variaveis definidas {$titulo} e {$dataDeHoje}. Claro, ainda não informamos ao Smarty o que colocar nelas.
Vamos melhorar nosso script:
meuPrimeiroTemplate.php
//inclui a classe Smarty require_once('Smarty.class.php'); //Instancia o objeto Smarty $objSmarty = new Smarty(); //Busca a data atual $data = date(“d/m/Y”); // dd/mm/yyyy //String com o título da pagina. $titulo = “Meu primeiro template, que bacana.”; //Informa ao Smarty o valor que deve ser atribuido a variável $dataDeHoje $objSmar->assign(“dataDeHoje”, $data); //Informa ao Smarty o valor que deve ser atribuido a variável $titulo $objSmarty->assign(“titulo”, $titulo); //Informa para o Smarty qual arquivo de template ele deve “ligar” com este módulo $objSmarty->display('meuPrimeiroTemplate.tpl');
Agora o smarty saberá que onde encontrar {$titulo} ele deverá substituir por ‘Meu primeiro template, que bacana’ e onde encontrar {$dataDeHoje} deverá colocar o retorno da função date do PHP.
Bom, para a Parte I está bom, na Parte 2 de nosso legado irei falar de como criar loops e condições nos templates para trabalhar com arrays.
Espero que tenha dado para quebrar o gelo do pessoal quanto ao smarty.
Até a próxima pessoal e não deixe de comentar!!
Muito legal Sr. Gerson! Parabéns pelo artigo
Aos poucos vamos mandando ver no site, em breve teremos muitos artigos.
Comentario do eduardo sobre o Artigo/Tutorial do Gerson sobre Smarty!!
Brincadeiras a parte….parabens e que vcs alavanquem o site!!
Muito obrigado pelos comentários até então.
Gersão, post show de bola, cheguei a usar o TBS, o Smarty é muito bom também! estamos no aguardo do proximo! abração!
Otimo tutorial, sabe explicar como eu faço para manipular registros do banco de dados ? e manipular variaveis GET,POST e também URL’s MOD REWRITE
Fala quik,
Desculpe o atraso em te responder parceiro, mas sabe né, correria nos projetos e o evento que está por vir….
Sobre registros de banco de dados, eu vou explicar em uma próxima postagem, mas posso te adiantar o usar o section, vc tem que passar os registros retornados do banco em forma de array, lembre-se use o método assign do smarty para passar valor para o template e uma vez nele vc pode usar o section.
Fica mais fácil se o seu array resultante da consulta ao banco for da seguinte ordem:
$arryResultante[0]['nome']
$arryResultante[0]['telefone']
$arryResultante[1]['nome']
$arryResultante[1]['telefone']
Exemplo:
< ?php
...
$objSmarty->assign(“variavelTPL”, $arrResultante);
< ?
…
…
Quanto ao GET, POST eu não entendi o que vc está querendo, pode dar um exemplo da sua dúvida?
já URL’s MOD REW vou dar uma pesquisada para vc.
Abraços e obrigado pelo comment.
Gostaria de saber se você poderia me mandar um smarty configurado para tradução em várias linguas
estou precisando
poderia me ajudar?
Bom dia Vinicius,
Claro que posso te ajudar, hoje mesmo vou escrever um exemplo para você, mas eu irei publicar aqui no site, para ficar para a prosperidade. kkk