El bloque se sustituye y se repite por "HTML" tantas veces como registros tenga Table.
Podemos hacer referencia a cada campo de cada registro con:
{: @$ table.field :}
Donde "field" es el nombre del campo de la tabla. {: @$ table.field :}
es una propiedad de {: @ (table) HTML :} por lo que
sólo tiene valor dentro del bloque table:
<table border="1"> {: @ usuarios <tr> <td> {: @$ usuarios.name :} </td> <td> {: @$ usuarios.email :} </td> </tr> :} </table> {: @$ usuarios.email :} <- ERROR, no tendrá ningún valor aquí.
Table ha de ser definido en nuestro script Perl como un array of hashes reference:
my $table = [ { name => 'pepito', email => 'pepito@example.com', }, { name => 'juanin', email => 'juanin@example.com', }, { name => 'paca', email => 'paca@example.com', } ];* Algunos módulos como DBI devuelven un array hash reference para los registros, de esta forma no es necesaria conversión alguna.
Ver: Inyección de código y Cross-site scripting.
Los parámetros no permiten la inclusión:
<table border="1"> {: @ ( '{: $ table :}' ) <- ERROR <tr> {: # Los comentarios siempre se pueden incluir :} <- Ok <td> {: @$ table.field1 :} </td> <td> {: @$ table.field2 :} </td> </tr> :} </table>
archivo.nhtml:
{: NES 1.0 ('archivo.pl') :} <html> <head> <title>Nes sample/title> </head> <body> <table border="1"> {: @ usuarios <tr> <td> {: @$ usuarios.name :} </td> <td> {: @$ usuarios.email :} </td> </tr> :} </table> </body> </html>archivo.pl:
use Nes; my $nes = Nes::Singleton->new('archivo.nhtml'); my $nes_tags = {}; my $users = [ { name => 'pepito', email => 'pepito@example.com', }, { name => 'juanin', email => 'juanin@example.com', }, { name => 'paca', email => 'paca@example.com', } ]; $nes_tags->{'usuarios'} = $users; $nes->out(%$nes_tags);Salida:
pepito | pepito@example.com |
juanin | juanin@example.com |
paca | paca@example.com |