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 |