PHP é à quinta-feira – Iniciação ao Smarty
Por R. Santos para o Pplware
Como já tínhamos visto anteriormente, o Smarty é um sistema de templates para PHP. Mais especificamente, fornece uma forma fácil de gerir a programação da aplicação web e o conteúdo da sua apresentação (layout).
Geralmente utilizado numa situação onde o programador da aplicação e o designer do layout executam tarefas diferentes, ou na maioria dos casos não são a mesma pessoa.
Pois bem, o Smarty traz a felicidade dos programadores e designers. Estes têm diferentes tarefas mas podem ser colaboradas de forma eficaz.
Como por exemplo:
As tarefas do programador:
- Tratar da lógica da aplicação web.
- Certificar-se que tudo está funcional.
- Não se preocupar com o layout.
As tarefas dos designers:
- Tratar do HTML sem afectar o programador.
- Fazer alterações no design sem pedir permissão ao programador.
- Não se preocupar com a lógica da aplicação web.
Instalação
- Fazer o download através do website oficial do Smarty.
- Extrair o ficheiro comprimido e enviar para o servidor através de SSH ou FTP.
Iremos precisar de criar mais dois directórios para meter o Smarty a funcionar. Irá ser lá que serão guardados os ficheiros (.tpl) do layout e os templates compilados pelo Smarty.
- Criar um directório com o nome templates e outro chamado templates_c (podem ser outros, só terá que alterar nas configurações).
- Se estiver em ambientes que não Windows deverá definir o chmod destes directórios para 775.
Só iremos precisar dos directórios libs, templates e templates_c. Todo o resto poderá eliminar.
Primeiro Smarty
PHP
Em primeiro lugar temos de importar a biblioteca. require 'libs/Smarty.class.php'; Agora precisamos de iniciar o objecto para o podermos utilizar.
$smarty = new Smarty();
Com a função assign(); vamos atribuir algumas variáveis para a nossa página.
$smarty->assign('Charset', 'iso-8859-1'); $smarty->assign('TituloPagina', 'O Meu Primeiro Smarty'); $smarty->assign('Titulo', 'Olá'); $smarty->assign('Texto', 'Este é o meu primeiro Smarty :)'); $smarty->display('index.tpl');
HTML
Como podemos ver, todas as variáveis definidas anteriormente no PHP são representadas no Smarty por {$variavel}, tal como todas as tags de template do Smarty contêm delimitadores. Por padrão, estes delimitadores são { e }, mas eles podem ser alterados.
Fácil não é? Acabamos de fazer o nosso primeiro Smarty 🙂
O que o Smarty vai fazer é analisar o seu template e a partir deste vai criar um ficheiro PHP para ser interpretado pelo interpretador. Quando a página é visualizada o Smarty lê esse ficheiro em vez do template, que poupa o trabalho de ter que analisar o template outra vez.
Sintaxe Básica
Comentários
{* Exemplo *}
Importar
{include file="cabecalho.tpl"} xyz {include="baixo.tpl"}
Condições
{if condição} x {else} y {/if}
Loops
For, Foreach
{section name=x loop=$y} {$y[x]} {$z[x]} {sectionlese} Opps {/section}
{foreach from=$x item=y} {$x} {foreachelse} Opps {/foreach}
Operações
{$x + $y} {$x - $y} {$x * $y} {$x / $y}
Arrays PHP
$smarty->assign('Utilizador',array('Id' => 15482022, 'PrimeiroNome' => 'Alberto', 'UltimoNome' => 'Milagre', 'Email' => 'emilagre@tudooquepuderes', 'Telefone' => '910000000'));
Smarty
{$Utilizador.Id} {$Utilizador.PrimeiroNome} {$Utilizador.UltimoNome} {$Utilizador.Email} {$Utilizador.Telefone}
Objectos
PHP
class O_Meu_Notebook {
public $Processador = 'Intel Core2 Duo P9550 - 2,66GHz'; public $Memoria = 4096; public $DiscoRigido = 500; public $PlacaGrafica = 'ATI Mobility Radeon HD 4650 - 1GB'; public $SistemaOperativo = 'Windows Vista Home Premium';
}
$objecto = New O_Meu_Notebook;
$smarty->assign('Notebook', $objecto);
Smarty
{$objecto->Processador} {$objecto->Memoria} MB {$objecto->DiscoRigido} GB {$objecto->PlacaGrafica} {$objecto->SistemaOperativo}
E assim dou por terminado esta iniciação.
Como de costume, qualquer dúvida e/ou sugestão podem postar nos comentários, no Fórum Pplware ou enviar-me um email para r.santos[at]live[dot]co[dot]uk.
Este artigo tem mais de um ano
Fabuloso.
Bom artigo, simples, com a informação necessária e bem explicado.
Uuuii.. parece-me que isto tem ar de descer a performance 😛
Mas pode ser bem útil, com certeza 🙂
Exacto, a sua utilidade e facilidade de uso por vezes supera a questão da performance, que é perfeitamente contornável com uma cache para o template (que acho que o smarty tem).
Não decresce a performance, já que os templates são compilados apenas da primeira vez que são executados e gravados para posteriores execuções.
A grande crítica aos sistemas de templates é que, embora de maneira mais simples, o próprio PHP já serve de sistema de templates.
Agora, para quem está habituado a misturar código com apresentação (“echo blablabla” no meio das funções PHP) o smarty é um grande passo na simplificação da programação.
Olá,
Como sistema alternativo deixo-vos o XTemplate: http://sourceforge.net/projects/xtpl/
Cumprimentos
Bom trabalho R. Santos!
Smarty é de longe o melhor template engine.
Aconselho, como programador nesta área há muitos anos, o uso do Smarty em conjunto com PEAR (http://pear.php.net).
Já agora, deixo uma função que, para quem vai usar smarty e javascript, vai necessitar:
{literal}
código javascript
{/literal}
o que estiver dentro destas tags é compilado sem interpretação smarty, permitindo assim que o código javascript quando colocado junto com o html não dê erros devido às chavetas ({) que são entendidas como inicio de código smarty.
Bem haja…
Apenas uma pequena melhoria da explicação do uso do {literal}
{literal}
Código javascript aqui dentro
{/literal}
Desapareceu… mas depois do {literal} deveria estar a tag SCRIPT, e antes do {/literal} deveria estar a tag /SCRIPT a identificar ser um bloco de scripts JavaScript.
Claro que para utilizadores avançados, será mais prático mudar as TAGS smarty { e } para por exemplo {{ e }}, hábito que já adquiri e que realmente acelera o desenvolvimento 🙂
Basta editar as seguintes linhas no ficheiro Smarty.class.php
/**
* The left delimiter used for the template tags.
*
* @var string
*/
var $left_delimiter = ‘{‘;
/**
* The right delimiter used for the template tags.
*
* @var string
*/
var $right_delimiter = ‘}’;
para por exemplo:
/**
* The left delimiter used for the template tags.
*
* @var string
*/
var $left_delimiter = ‘{{‘;
/**
* The right delimiter used for the template tags.
*
* @var string
*/
var $right_delimiter = ‘}}’;
Assim, muito dificilmente terão problemas com outras linguagens de programação no vosso código.
Ou no vosso próprio PHP (sem ter que editar a class do Smarty)
$smarty = new Smarty();
$smarty->left_delimiter = ‘{{‘;
$smarty->right_delimiter = ‘}}’;
PS: Desculpem a quantidade de posts, mas realmente adoro trabalhar com o Smarty pela versatilidade que tem, e fiquei entusiasmado com o artigo 🙂 Prometo que vou tentar apenas ‘meter o bedelho’ quando vir algo incorrecto ou que possa ser melhorado. Abraço.
Parabéns!
Seus artigos são muito bons mesmo. Sou programador PHP e já estou usando o Smarty nas minhas páginas. Realmente trata-se de uma biblioteca muito boa.
Junte isso ao MVC e sejam felizes!
Olá, muito bom seu artigo. Estou começando agora com PHP e lendo um livro descobri essa biblioteca PHP. Em um outro site olhei um video do smarty php onde também me ajudou muito.