Página Inicial > Tutoriais > Artigo/Tutorial do Gerson sobre Smarty [parte 1]

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!!

Categories: Tutoriais Tags:
  1. 30, março, 2009 em 18:52 | #1

    Muito legal Sr. Gerson! Parabéns pelo artigo ;)
    Aos poucos vamos mandando ver no site, em breve teremos muitos artigos.

  2. Eduardo
    2, abril, 2009 em 15:07 | #2

    Comentario do eduardo sobre o Artigo/Tutorial do Gerson sobre Smarty!!

    Brincadeiras a parte….parabens e que vcs alavanquem o site!!

  3. 6, abril, 2009 em 13:28 | #3

    Muito obrigado pelos comentários até então.

  4. GabrielBarboza
    9, abril, 2009 em 10:39 | #4

    Gersão, post show de bola, cheguei a usar o TBS, o Smarty é muito bom também! estamos no aguardo do proximo! abração!

  5. quik
    22, abril, 2009 em 22:32 | #5

    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

  6. 23, abril, 2009 em 20:27 | #6

    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);
    < ?


    {section name=i loop=$variavelTPL}

    {/section}
    {$variavelTPL[i].nome}

    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.

  7. 8, abril, 2010 em 10:57 | #7

    Gostaria de saber se você poderia me mandar um smarty configurado para tradução em várias linguas
    estou precisando
    poderia me ajudar?

  8. 9, abril, 2010 em 09:07 | #8

    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

  1. Nenhum trackback ainda.