Thread: [htmltmpl] Parameter not being recognized...
Brought to you by:
samtregar
From: Tim H. <ti...@fe...> - 2003-06-18 23:14:13
|
I have a fairly complicated template that utilizes one <tmpl_loop>, a couple of <tmpl_unless>s, and several <tmpl_if><tmpl_else> constructs. My problem is that in a certain area of the template any parameter name that I enter isn't being recognized, and so (because of die on bad params) my script is failing. I've been over the template several times today, and I'm printing it out now so that I can look though it more carefully. If I don't find anything obvious, though, where do I go from here? Thanks! =3D) --Tim Howell |
From: Ron M. <rma...@in...> - 2003-06-19 02:31:05
|
On Wed, Jun 18, 2003 at 04:14:05PM -0700, Tim Howell wrote: > I have a fairly complicated template that utilizes one <tmpl_loop>, a > couple of <tmpl_unless>s, and several <tmpl_if><tmpl_else> constructs. > My problem is that in a certain area of the template any parameter name > that I enter isn't being recognized, and so (because of die on bad > params) my script is failing. > > I've been over the template several times today, and I'm printing it out > now so that I can look though it more carefully. If I don't find > anything obvious, though, where do I go from here? > > Thanks! =) > > --Tim Howell I'm guessing here, but it sounds like you're somewhere in the <tmpl_loop> and global_vars is not set true and you're referencing some value that is not in the tmpl_loop variable. The following script will fail because xx is not part of the 'myloop' variable. But if you set global_vars=>1 in the call to new the error will go away. Alternatively you could add xx to the 'myloop' structure. #!/usr/bin/perl -w use strict; use HTML::Template; my $tmpl = HTML::Template->new(filehandle => \*DATA, global_vars=>1); $tmpl->param( greeting => 'Greetings and Salutations', myloop => [ {item=>'item 1', selected=>0.}, {item=>'item 2', selected=>0.}, {item=>'item 3', selected=>1.}, {item=>'item 4', selected=>0.}, ], xx => 'is xx', ); print $tmpl->output; __DATA__ <html> <head> </head> <body> <h1><tmpl_var name="greeting"></h1> <ul> <tmpl_loop name="myloop"> <li><tmpl_var name="item"></li> <tmpl_if name="selected"><tmpl_var name="xx"></tmpl_if> </tmpl_loop> </ul> </body> </html> Ron -- Ron Mahoney Ra Security Systems, Inc. rma...@ra... |
From: Roger B. W. <ro...@fi...> - 2003-06-19 08:52:33
|
On Wed, Jun 18, 2003 at 04:14:05PM -0700, Tim Howell wrote: >I've been over the template several times today, and I'm printing it out >now so that I can look though it more carefully. If I don't find >anything obvious, though, where do I go from here? What I use in this situation is my template dumper program. I haven't posted this for a while, so it's probably time to do it again: #! /usr/bin/perl -w use strict; use HTML::Template; my $t=HTML::Template->new(filename => $ARGV[0], die_on_bad_params => 0); my @l=$t->param; my @o; &output(0,\@o,\@l); sub output { my ($level,$oldref,$listref)=@_; my @list=@{$listref}; my @old=@{$oldref}; foreach my $param (sort @list) { my @k=@old; push @k,$param; print ' ' x $level; print "$param\n"; if ($t->query('name' => \@k) eq 'LOOP') { my @l=$t->query('loop' => \@k); &output($level+1,\@k,\@l); } } } Roger |