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.

  
     Pin It  

Arquivado na categoria: PHP, Tutoriais


13 Comentários

  1. Fabuloso.

    Bom artigo, simples, com a informação necessária e bem explicado.

  2. Uuuii.. parece-me que isto tem ar de descer a performance :P
    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.

  3. Olá,

    Como sistema alternativo deixo-vos o XTemplate: http://sourceforge.net/projects/xtpl/

    Cumprimentos

  4. Bom trabalho R. Santos!

  5. 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}

    • 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.

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

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

Deixe o seu comentário

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. O autor deste site reserva-se, desde já, o direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.