{: @ (table) HTML :}

Descripción

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.



Seguridad

Ver: Inyección de código y Cross-site scripting.

Inclusión

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>

Ejemplo

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