Hi Rick,

The bug is that you're calling

my %list = (list => \@courses);

when you should be calling

my %list = (courses => \@courses);

If only there were 'strict' and 'warnings' for Template!  :-)

Andrew

On Sun, Oct 28, 2018 at 8:52 PM Rick T <p...@reason.net> wrote:

> As a novice in perl I realize that it’s a bit presumptuous for me to
> attempt references and complex data structures. But I had a need and gave
> it a shot — a failing shot. I’ve been fiddling with my failure, almost
> mindlessly, all weekend; now I need some help.
>
> Below is the template segment I am trying to populate with data,
> and following it is the segment of code that attempts to call it. The
> output I get in my browser is persistently empty, with every instance of [%
> %] being replaced with banks.
>
>
> start HTML ------------
> <table>
> [% FOREACH course IN courses %]
> <br><br>
> <h2 id="[% course.cat_abbr %]">[% courses.category %]</h2><br><br>
>
> <table> <caption> [% course.caption %] </caption>
> <!-- LEVEL 4 -->
> <tr style="background-color: Plum">
>   <td>L4 (HN)</td>
>   <td><input type="checkbox" name="course_file"
>              value="[% course.title %]_q1l4v[% courses.version %]">
> 1-4</td>
>   <td><input type="checkbox"  name="course_file"
>              value="[% course.title %]_q2l4v[% course.version %]"> 2-4</td>
>   <td><input type="checkbox" name="course_file"
>              value="[% course.title %]_q3l4v[% course.version %]"> 3-4</td>
>   <td><input type="checkbox" name="course_file"
>              value="[% course.title %]_q4l4v[% course.version %]"> 4-4</td>
>
> </table>
> [% END %]
> <!-- end of Template loop —>
>
>
> end HTML ————————————— start perl:
>
> my ( $cat_abbr, $category, $title, $caption, $version ); # for Template
> my ( @courses, $string ); # for calculating
> while ( my $line = <DATA> ) {
>     ( $cat_abbr, $category, $title, $version ) = split /\t/, $line;
>     chomp $version;
>     $caption = $title;
>         $caption =~ s{_|\-}{ }xmsg;     # replace _ and - with space
>         $caption =~ s{\b(\w)}{\U$1}g;   # impose simple titlecase
>         $caption = "$caption" . ' (version ' . "$version" . ')';
>
>     push @courses,
>         {
>             cat_abbr => $cat_abbr,
>             category => $category,
>             caption  => $caption,
>             title    => $title,
>             version  => $version,
>         }
> }
>
> my %list = (list => \@courses);
>
> # Call Template Toolkit
> local $| = 1; # auto flush buffer
> my $path = "/big/dom/x$server/www/templates";
> my $tt = Template->new(
>     {INCLUDE_PATH => "$path"}
> );
> my $input = 'course_catalog.tt';
> my $vars = \%list;
> print "Content-Type: text/html\n\n";
> $tt->process($input, $vars)
>     or die $tt->error();
>
> exit;
>
> # tab separated lines of trial data
> __DATA__
> eng ENGLISH english 2
> american-literature 1
> english-literature 1
> sci SCIENCE integrated-science 2
> biology 2
> chemistry 1
> physics 1
> soc SOCIAL STUDIES geography-and-cultures 1
> world-history 2
> american-history 1
> ele ELECTIVES health 1
>
>
> Any and all advice will be most welcome!
> Rick Triplett
>


-- 
Andrew Solomon

Perl Trainer, Geekuni http://geekuni.com/
and...@geekuni.com // +44 7931 946 062

Reply via email to