Template Toolkit no Perl

by

Acho que uma das poucas coisas que gosto no Perl é o módulo Template Toolkit. Como a documentação é boa, vou só dar uma olhada superficial.

Comecemos pela instalação:

# aptitude install libtemplate-perl

O uso é semelhante a qualquer biblioteca de templates, como o Smarty no PHP. Preparamos as variáveis que serão disponibilizadas e em seguida processamos determinado arquivo.

O script fica assim:

use strict;
use warnings;
 
use Template;
use File::Basename;
 
my $r = shift;
$r->content_type("text/html");
 
my $directory = (fileparse $r->filename)[1];
 
my $template = Template->new({
    INCLUDE_PATH => "$directory/templates",
});
 
my $vars = {
    artista => 'Pink Floyd',
    album   => 'Pulse',
    musicas => [
        { numero => 12, titulo => 'Comfortably Numb' },
        { numero => 11, titulo => 'Wish You Were Here' },
        { numero => 3,  titulo => 'Time' },
    ],
};
 
$template->process('musica.tt2', $vars)
    || die $template->error();

E o template:

<html>
<body>
    <h1>[% artista %]</h1>
    <h2>[% album %]</h2>
    [% IF musicas %]
        <ul>
        [% FOREACH musica IN musicas %]
            <li>[% musica.numero %] – [% musica.titulo %]</li>
        [% END %]
        </ul>
    [% ELSE %]
        <p>Nenhuma música.</p>
    [% END %]
</body>
</html>

Quem já está acostumado a utilizar templates vai precisar apenas se adaptar à sintaxe do Template Toolkit.

Em relação ao script, o trecho my $directory = (fileparse $r->filename)[1]; é uma peculiaridade do mod_perl. O diretório atual do processo não é o diretório do script, aqui ficou como sendo a raiz do sistema. Então se tentássemos carregar o template templates/musica.tt2 ele não encontraria o arquivo.

A função fileparse do módulo File::Basename retorna uma lista com o nome do arquivo, diretório e sufixo, respectivamente. Da forma como foi utilizada, o diretório do arquivo que está sendo processado é atribuído à variável $directory. Essa variável então é utilizada como base para o caminho absoluto do diretório dos templates que é passado como configuração para o Template Toolkit.

Também é importante verificar se o template foi processado corretamente. Se não houvesse a linha || die $template->error(); e o processamento do template desse erro, a função process apenas retornaria 0, sem mostrar nada na tela. Utilizando o die como demonstrado, qualquer problema vai mostrar Internal Server Error no browser e detalhes do erro no error.log do Apache.

Recomendo a leitura

Anúncios

2 Respostas to “Template Toolkit no Perl”

  1. Higor Morais Says:

    eu estou tendo dificuldades na configuração, quando eu rodo o arquivo dando perl arquivo.pl, ele imprime os resultados perfeitamente, mas quando eu tento acessar o arquivo .tt2 via browser, ele não mostra os valores apenas os [% var %], o que poderia ser?Meu mode perl pode tá mal configurado?

    Obrigado.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: