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

hi, i was wondering if there is any possible way to seperate my printouts within a <TMPL_LOOP> ?
such as,
"1 2 3 4 5 - break"
"6 7 8 9 0 - break"

from what i've read, html::template doesn't seem to allow me to declare any counter variables inside the template, and the only ones they had are loop_context_vars.

Replies are listed 'Best First'.
Re: html::template loop seperator?
by moritz (Cardinal) on Sep 19, 2007 at 08:52 UTC
    You have to move the logic to the Perl program.

    You could do something along these lines:

    <TMPL_LOOP NAME=OUTER> <TMPL_LOOP NAME=INNER><TMPL_VAR NAME=COUNT> </TMPL_LOOP> -break </TMPL_LOOP>

    And then your Perl program:

    my @outer; for my $o (0..1){ my @inner = map { { COUNT > $_ } } (5*$o+1) .. (5*$o+5) push @outer, {INNER => \@inner}; } $tmpl->param(OUTER => \@outer);

    (untested)

Re: html::template loop seperator?
by adrive (Scribe) on Sep 19, 2007 at 13:54 UTC
    here's a basic way to control the separator that works, but can't really apply in my case. Does anyone know if there's any possible way to create separators from a single array?
    etc :
    @arrayResult = qw(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
    then somewhere inside the loop, seperate @arrayResult after each 5th element and finally put into template.

    test1.pl :

    my $template = HTML::Template->new(filename => 'test1.html'); my @array1 = qw(1 2 3 4 5); my @array2 = qw(10 11 12 13 14 15); my @outer; for my $o (@array1){ my @inner; for my $i (@array2){ push(@inner, {INNERTEXT=>$i}); } push(@outer, { INNER=> \@inner, TITLE=> "test drive" }); } $template->param(OUTER => \@outer); print $template->output();


    test1.html

    <html> <body> <table style="border:solid 1px black;"> <TMPL_LOOP NAME=OUTER> <tr> <td> <TMPL_VAR NAME=TITLE> </td> <TMPL_LOOP NAME=INNER> <td> <TMPL_VAR NAME=INNERTEXT> </td> </TMPL_LOOP> <td>-break </td> </tr> </TMPL_LOOP> </table> </body> <body>