http://qs321.pair.com?node_id=11118737

Takamoto has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I am experimenting with templating a table. I have no issues with fixed data structures... but now I need to generate a table with HTML::Template where the number and the names of the columns may vary. I generate my data like this:

my $dictionary = [ { 'Spanish' => 'uno', 'English' => 'one', 'Italian' => 'uno', }, { 'Spanish' => 'dos', 'English' => 'twho', 'Italian' => 'due', }, { 'Spanish' => 'tres', 'English' => 'Three', 'Italian' => 'tre', } ]; use HTML::Template; my $template = HTML::Template->new(filename => 'dictionary.tmpl'); $template->param(DICTIONARY => $dictionary); $template->output;

However, my data may also look like this:

my $dictionary = [ { 'Spanish' => 'uno', 'French' => '1', }, { 'Spanish' => 'dos', 'French' => '2', }, { 'Spanish' => 'tres', 'French' => '3', } ];

How could I template this?

Replies are listed 'Best First'.
Re: HTML::Template Table
by Takamoto (Monk) on Jun 30, 2020 at 21:58 UTC

    Okay, got it. I have been able to use a nested loop, modifying my data structure to:

    $VAR1 = [ { 'inner_loop' => [ { 'data' => 'one' }, { 'data' => 'two' }, { 'data' => 'three' } ] }, { 'inner_loop' => [ { 'data' => 'four' }, { 'data' => 'five' }, { 'data' => 'six' } ] }, { 'inner_loop' => [ { 'data' => 'seven' }, { 'data' => 'eight' }, { 'data' => 'nine' } ] } ];

    And the following template

    <tbody> <TMPL_LOOP NAME=DICTIONARY> <tr> <TMPL_LOOP NAME=inner_loop> <td><TMPL_VAR NAME=data></td> </TMPL_LOOP> </tr> </TMPL_LOOP> </tbody>
Re: HTML::Template nested Table
by perlfan (Vicar) on Jul 02, 2020 at 13:17 UTC
    Nice to see you solved it. I personally use Template Toolkit (via Template). In addition to it being very mature, robust, well supported in a number of great Perl webframes, and well documented; it is also very flexible and is basically its own programming language. So much so that if had been around when Rasmus Lerdorf used Perl to create the first incantations of PHP, I am sure he would have used TT rather than roll his own thing. Ignore that last part, I'm trying to talk you into using it. xD