Olá pessoal!
Para quem não conhece, o módulo HTML::Template está para o Perl assim como o Smarty está para o PHP.
O que quero dizer, é que este módulo ofecere alguns (ou todos) os recursos encontrados também no Smarty template engine.
Para maiores informações sobre o módulo:
http://search.cpan.org/~samtregar/HTML-Template-2.8/Template.pm
Veja abaixo uma breve explicação de uma dasta tags.
<TMPL_VAR>
A Tag <TMPL_VAR> é muito simples. Para cada tag <TMPL_VAR> no template você chama $template->param(PARAMETER_NAME => “VALOR”).
Na saída do template, <TMPL_VAR> está substituído com o texto do VALOR você especificou.
Exemplo:
No .pl: $template->parm('Foo' => 'Foo!!!');
No .tmpl: <TMPL_VAR NAME="Foo">
A saída seria: Foo!!!
As outras tags disponíveis são as seguintes:
E como diz o título, veja abaixo um exemplo de um menu com categoria/subcategoria feito usando o módulo HTML::Template.
Arquivo: menu.pl
#!"C:\Perl\bin\perl.exe"
# Sim! Eu uso windows. =)
use HTML::Template;
my $sURLBase = 'http://localhost/cgi-bin/';
my $template = HTML::Template->new(
filename => 'menu.tmpl',
loop_context_vars => 1,
global_vars => 1
);
$template->param(
Menu => [
{ Categoria => 'Programação',
Titulos => [
{ Titulo => 'PHP',
URL => $sURLBase . '?area=PHP',
Subcategoria => 1,
Subcategoria => [
{ Nome => 'Scripts prontos',
URL => $sURLBase . '?area=PHP&secao=Scripts'
},
{ Nome => 'Apostilas',
URL => $sURLBase . '?area=PHP&secao=Apostilas'
},
],
},
{ Titulo => 'ASP',
URL => $sURLBase . '?area=ASP'
},
],
},
{ Categoria => 'Design',
Titulos => [
{ Titulo => 'Photoshop',
URL => $sURLBase . '?area=Photoshop'
},
{ Titulo => 'Fireworks',
URL => $sURLBase . '?area=Fireworks'
},
],
},
]
);
$template->param(Powered => '../perl.gif');
print "Content-Type: text/html\n\n",
$template->
output;
Arquivo: menu.tmpl
<html>
<head>
<title>HTML::Template - Criando menu</title>
<style>
<!--
dl {
background-color: #FFFFFF;
border: 1px solid #CCCCCC;
padding: 2px;
width: 150px;
}
dt {
background-color: #DAE8EB;
border-bottom: 1px solid #CCCCCC;
font-family: Arial, Tahoma, Verdana;
font-size: 13px;
color: #000000;
padding: 2px;
margin: 1;
}
dd {
background-color: #F5F5F5;
border: 1px solid #F9F9F9;
font-family: Arial, Tahoma, Verdana;
font-size: 11px;
color: #000000;
margin: 0;
padding: 4px;
}
dl .submenu {
display: none;
margin: 0;
width: 144px;
}
#submenu {
background-color: #FEFEFE;
margin: 0;
padding: 4px;
}
#submenu:hover {
background-color: #F9FAFB;
}
dd:hover {
background-color: #E8EBEE;
}
a {
text-decoration: none;
color: #808080;
}
a:hover {
color: #000000;
text-decoration: underline;
}
//-->
</style>
<script>
<!--
function display (sId) {
if (document.getElementById(sId).style.display == 'block') {
document.getElementById(sId).style.display = 'none';
} else {
document.getElementById(sId).style.display = 'block';
}
}
//-->
</script>
<body>
<dl>
<TMPL_LOOP NAME="Menu">
<dt><TMPL_VAR NAME="Categoria"></dt>
<TMPL_LOOP NAME="Titulos">
<TMPL_IF NAME="Subcategoria">
<dd>
+ <a href="javascript:void(0);" onclick="display('<TMPL_VAR NAME="Titulo">');">
<TMPL_VAR NAME="Titulo">
</a>
</dd>
<TMPL_ELSE>
<dd><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR NAME="Titulo"></a></dd>
</TMPL_IF>
<TMPL_LOOP NAME="Subcategoria">
<TMPL_IF __first__>
<dl id="<TMPL_VAR NAME="Titulo">" class="submenu">
</TMPL_IF>
<dd id="submenu">- <a href="<TMPL_VAR NAME="URL">"><TMPL_VAR NAME="Nome"></a></dd>
<TMPL_IF __last__>
</dl>
</TMPL_IF>
</TMPL_LOOP>
</TMPL_LOOP>
</TMPL_LOOP>
</dl>
</body>
</html>
Para ver o resultado:
http://ecl.zoone.com.br/imgs/screen.gif
Até a próxima! (: