PHPTAL – Template Attribute Language para PHP5

Tags: , , — May 18, 2007 @ 3:13 pm

Como meu primeiro Post específico sobre PHP, vou dar uma boa dica aos desenvolvedores Web.

Qualquer Desenvolvedor de Web Sites dinâmicos, use PHP, ASP, JSP ou Ruby, já se deparou com um fator importante que muitas vezes é um problema… Separar a Lógica da Aplicação do Design de Templates. Assim como é extremamente incômodo para programadores web se peocuparem com o design das páginas (experiência própria) a maioria dos bons designers de templates não conhecem, ou não se interessam por aprender PHP ou outra linguagem de programação.

Quem já se deparou com este dilema provavelmente já procurou por linguagens próprias de templates, desenvolvidas para separar a lógica do design da aplicação. Uma destas linguagens, a qual inclusive tem um espaço no portal php.net, é a Smarty Template Engine (http://smarty.php.net), trata-se de uma classe php que interpreta os arquivos de template (*.tpl), e grava o resultado num cache, para evitar que o trabalho se repita desnecessáriamente. O problema é que: 1. o designer precisa aprender Smarty, o que nao deixa de ser uma linguagem de programação; 2. os templates desenvolvidos para ela servem apenas para PHP.

Recentemente me deparei com uma extenção para o PHP5 que facilita, e muito, o trabalho dos designers. Trata-se do PHPTAL (http://phptal.motion-twin.com), que é uma imlementação do ZPT (Zope Page Templates), ou seja, uma biblioteca de templates XML/XHTML para PHP.

Antes de falar mais sobre como a TAL funciona, vamos observar um fragmento de código de uma template PHP:

Usando a sintexe alternativa do PHP:

<?php foreach ($values as $value): ?>
    <div id=”item”>
        <div id=”title”>
            <?php if ($value->hasDate()): ?>
                <?=$value->getDate()?>
            <?php endif; ?>
            <a href=”<?= $value->getUrl() ?>”>
                <?=htmlentities($value->getTitle())?>
            </a>
        </div>
        <div id=”content”>
            <?= htmlentities($value->getContent()) ?>
        </div>
    </div>
<?php endforeach; ?>

Agora, usando o PHPTAL:

<div id=”item” tal:repeat=”value values”>
    <div id=”item”>
        <span tal:condition=”value/hasDate” 
        tal:replace=”value/getDate”/>
        <a tal:attributes=”href value/getUrl” 
        tal:content=”value/getTitle”/>
    </div>
    <div id=”content” tal:content=”value/getContent”/>
</div>

Usando uma outra biblioteca de templates, o código não ficaria muito diferente do primeiro exemplo, apenas um pouco mais simples de entender. Já o PHPTAL provê uma template com tags XHTML e propriedades XML, sem inserir código alienígena à template.

As propriedades TAL podem parecer um pouco estranhas quando iniciamos com a linguagem. Vamos alterar o código da template um pouco:

<div id=”item” tal:repeat=”value values”>
    <div id=”item”>
        <span tal:condition=”value/hasDate” 
        tal:replace=”value/getDate”>
            2005-01-28
        </span>
        <a href=”sample.html”
            tal:attributes=”href value/getUrl”
            tal:content=”value/getTitle”>
            My item title
        </a>
    </div>
    <span id=”content” tal:content=”value/getContent”>
        This is a sample content which is replaced by the
        real content when the template is run with real
        data.
    </span>
</div>

Assim podemos adicionar textos exemplos ou explicativos as tags, que serão substituidos pelo conteúdo das variáveis. Esta é, na minha opinião, uma das melhores vantagens do PHPTAL sobre outras bibliotecas de templates. Pois permite que os templates seja visualizados por qualquer navegador mesmo sem um servidor PHP.

Vejamos algumas vantagens em se utilizar PHPTAL:

  • separação da lógica da apresentação;
  • avisa se sua tag html estiver mal formatada ou não estiver fechada;
  • sem mais htmlentities();
  • templates bastante limpas e legíveis;
  • possibilidade de inserir textos exemplos para pré-visualizar a template sem um servidor PHP;
  • integração fácil com editores HTML visuais;
  • sistema de internacionalização (i18n) integrado;
  • pouquíssima perda de velocidade;
  • suporte da comunidade ZPT (http://zope.org);
  • portabilidade, os templates produzidos com TAL podem, geralmente, ser utilizados com qualquer linguagem (PHP, ASP, etc.).

O PHPTAL funcionará apenas com PHP5, por causa das funcionalidades de Orientação a Objeto adicionadas no PHP5, e não terá suporte às versões anteriores da linguagem. Mas como diz o desenvolvedor da biblioteda: “Forget PHP4″.

Não vou extender mais o artigo mas, se desejarem posso postar mais conteúdo sobre o PHPTAL aqui. Para quem quiser discutir a biblioca apenas comente. Podemos também montar um grupo para traduzir o Manual do PHPTAL para português.
Fontes: http://phptal.motion-twin.com, http://zope.org.