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:
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 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:
<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.
Maio 20, 2009 às 10:59 am |
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.
Maio 20, 2009 às 12:32 pm |
Olá, Higor!
Você deve acessar o arquivo.pl pelo browser e não o .tt2 diretamente.
Diogo