Hi Eric, It sounds like you have hit the dreaded "top level param, not referenced before use in template loop, so I'll just do nothing" bug... try this somewhere before your first TMPL_LOOP (say at the top of the file), in your first template:
<!-- H::T BUG: <TMPL_VAR URL_BASE> --> which _should_ do absolutely nothing useful/harmful to the html output. However, it will result in H:T actually getting a reference to the URL_BASE variable. What you were expecting to happen (ie template variable used in some child template, when being set at the top-level), is what most people expect to happen... In my own templates, I have also hit this problem. This bug is a result of how H::T handles TMPL_LOOP invocations... it basically does a recursive call of itself, passing the known params from the previous instance, into this new invocation. Since the previous invocation hasn't referenced the TMPL_VAR, that value isn't passed into the TMPL_LOOP invocation. Hope this helps, Mathew ----- Original Message ----- From: "Eric Frazier" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, December 17, 2004 10:39 AM Subject: [htmltmpl] Templates with template loops within templates > Hi, > > Great subject line huh? :) > > Ok we have a template. > Inside that template we load in from a database a template with its own > vars which makes use of a template loop. > In that second template we have a var called URL_BASE which is the base > path. It works inside the second template, except for within the template > loop output. > > > So imagine we already have template object: $template (it by the way has a > var called URL_BASE also that I thought would be passed down to this inside > template as well) > > my $shipping_temp = > $config->getShipping_temp($self->param('DEFAULT_PRODUCT')); ## returns > array ref > my $ship_list_hash = $config->getShipping_list($instance,$dom_int); > > $template->param(SHIPPING => '1'); ## part of the top level template > > my $shipref = \$shipping_temp->[0]; > > my $ship_html = HTML::Template->new( scalarref => $shipref, > die_on_bad_params =>0); > my @loop_values = (); > my $num_options = keys(%$ship_list_hash); > > foreach my $key( keys(%$ship_list_hash) ){ > > my %inside_hash = ('S_ICON' => > $ship_list_hash->{$key}{'courier_icon_url'}, > 'S_COURIER' => $ship_list_hash->{$key}{'courier_name'}, > 'S_METHOD' => $ship_list_hash->{$key}{'courier_method'} , > 'S_METHOD_ID' => $ship_list_hash->{$key}{'ship_method_id'}, > 'S_COST' => > $ship_list_hash->{$key}{'shipping_cost'} > > ); > > if ($shipping_temp->[1] eq > $ship_list_hash->{$key}{'ship_method_id'}){ > $inside_hash{'DEFAULT'} = 'Checked'; > } > > if ($num_options < 2){ > $inside_hash{'DEFAULT'} = 'Checked'; > } > > > push(@loop_values,\%inside_hash); > > } > $ship_html->param(URL_BASE => $self->param('URL_BASE')); ## > the problem var > $ship_html->param(SHIP_LOOP => [EMAIL PROTECTED]); > > > my $tmpout = $ship_html->output(); > > > > Below is the raw HTML output produced, notice the spacer.gif has a full url > where the ups_2D.gif which comes from the loop does not. > > I was a little confused to start off with because I thought the presence of > the URL_BASE in the second template would be parsed as a result of being > set in the original top level template. So not only does that not seem to > be happening, but also when setting the var again in the second template it > is not working inside the template loop. So my first question, is this the > way HTML::Template should be working? I didn't expect this problem. The > next question of course is how can I get this var to be parsed inside the > loop? > > Using the current versions of both HTML::Template and CGI::Application > > Please let me know if this is enough info or too much, I wanted to give as > much detail as I could because I found it hard to explain what I am doing > with just words. > > > Thanks, > > Eric > > > <!--Start of Shipping type Section > --> > <TABLE WIDTH=700 class="bord" BORDER=0 CELLPADDING=2 CELLSPACING=0 > align="center"> > <TR> > > <TD class="bord" align="center"><span > class="title">Shipping Method</span></TD> > </TR> > > <TR> > > <TD> > > <!--second color > table--> > <TABLE WIDTH=700 class="main" BORDER=0 > CELLPADDING=10 CELLSPACING=0 align="center"> > <TR> > > <TD class="main" > align="center"> > <!--pieces > table--> > <TABLE WIDTH=95% BORDER=0 CELLPADDING=0 > CELLSPACING=0 align="center"> > <tr> > > <td><IMG > SRC="https://www.host.com/htmltemp_consol/images/spacer.gif" WIDTH=10 > HEIGHT=5></TD> > </tr> > > <tr> > <td> > <table align="center"> > <tr> > > > > <label > for="ship4"> > > <TD width=15 align="right"><input type=radio id="ship4" > name="ship_option" value="4" Checked></TD> > <TD width=65 class="boxfields" align="center" valign="top"> > <img src="images/shipping/ups_2D.gif" alt="LEM Domestic > "><br><b>$10.00</b></TD> > </label> > > </tr> > </table> > </td> > </tr> > > <tr> > > <td><IMG > SRC="https://www.host.com/htmltemp_consol/images/spacer.gif" WIDTH=10 > HEIGHT=5></TD> > </tr> > > </table> > > <!--end of pieces > table--> > </td> > > </tr> > > </table> > > <!--end of second color > table--> > </TD> > > </TR> > > </table> > > <!--end of Shipping type Section--> > > > > > > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Html-template-users mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/html-template-users > ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://productguide.itmanagersjournal.com/ _______________________________________________ Html-template-users mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/html-template-users