Criando menu com o módulo HTML::Template

Perl
Enviado por Eclesiastes em Sáb, 29/07/2006 - 20:15.Perl

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

  1. #!"C:\Perl\bin\perl.exe"
  2. # Sim! Eu uso windows. =)
  3.  
  4. use HTML::Template;
  5.  
  6.     my $sURLBase = 'http://localhost/cgi-bin/';
  7.  
  8.     my $template = HTML::Template->new(
  9.         filename          => 'menu.tmpl',
  10.         loop_context_vars => 1,
  11.         global_vars       => 1
  12.     );
  13.  
  14.     $template->param(
  15.  
  16.         Menu => [
  17.             { Categoria => 'Programação',
  18.                 Titulos => [
  19.                     { Titulo => 'PHP',
  20.                       URL    => $sURLBase . '?area=PHP',
  21.                       Subcategoria => 1,
  22.                       Subcategoria => [
  23.                         { Nome => 'Scripts prontos',
  24.                           URL => $sURLBase . '?area=PHP&secao=Scripts'
  25.                         },
  26.                         { Nome => 'Apostilas',
  27.                           URL => $sURLBase . '?area=PHP&secao=Apostilas'
  28.                         },
  29.                       ],
  30.                     },
  31.                     { Titulo => 'ASP',
  32.                       URL    => $sURLBase . '?area=ASP'
  33.                     },
  34.                 ],
  35.             },
  36.             { Categoria => 'Design',
  37.                 Titulos => [
  38.                     { Titulo => 'Photoshop',
  39.                       URL    => $sURLBase . '?area=Photoshop'
  40.                     },
  41.                     { Titulo => 'Fireworks',
  42.                       URL    => $sURLBase . '?area=Fireworks'
  43.                     },
  44.                 ],
  45.             },
  46.         ]
  47.        
  48.     );
  49.    
  50.     $template->param(Powered => '../perl.gif');
  51.    
  52.     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! (:



Enviado por Moézio (não verificado(a)) em Dom, 29/03/2009 - 23:20.

Esse código ai ta errado. não funciona aqui.