html-template-users Mailing List for HTML::Template (Page 3)
Brought to you by:
samtregar
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(42) |
Jul
(80) |
Aug
(77) |
Sep
(97) |
Oct
(65) |
Nov
(80) |
Dec
(39) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(63) |
Feb
(47) |
Mar
(45) |
Apr
(63) |
May
(67) |
Jun
(51) |
Jul
(78) |
Aug
(37) |
Sep
(45) |
Oct
(59) |
Nov
(50) |
Dec
(70) |
2004 |
Jan
(23) |
Feb
(90) |
Mar
(37) |
Apr
(53) |
May
(111) |
Jun
(71) |
Jul
(35) |
Aug
(58) |
Sep
(35) |
Oct
(35) |
Nov
(35) |
Dec
(20) |
2005 |
Jan
(51) |
Feb
(19) |
Mar
(20) |
Apr
(8) |
May
(26) |
Jun
(14) |
Jul
(49) |
Aug
(24) |
Sep
(20) |
Oct
(49) |
Nov
(17) |
Dec
(53) |
2006 |
Jan
(12) |
Feb
(26) |
Mar
(45) |
Apr
(19) |
May
(19) |
Jun
(13) |
Jul
(11) |
Aug
(9) |
Sep
(10) |
Oct
(16) |
Nov
(17) |
Dec
(13) |
2007 |
Jan
(9) |
Feb
(12) |
Mar
(28) |
Apr
(33) |
May
(12) |
Jun
(12) |
Jul
(19) |
Aug
(4) |
Sep
(4) |
Oct
(5) |
Nov
(5) |
Dec
(13) |
2008 |
Jan
(6) |
Feb
(7) |
Mar
(14) |
Apr
(16) |
May
(3) |
Jun
(1) |
Jul
(12) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(9) |
2009 |
Jan
(9) |
Feb
|
Mar
(10) |
Apr
(1) |
May
|
Jun
(6) |
Jul
(5) |
Aug
(3) |
Sep
(7) |
Oct
(1) |
Nov
(15) |
Dec
(1) |
2010 |
Jan
|
Feb
|
Mar
|
Apr
(9) |
May
|
Jun
|
Jul
(5) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(3) |
Mar
|
Apr
(28) |
May
|
Jun
|
Jul
(3) |
Aug
(4) |
Sep
(3) |
Oct
|
Nov
(8) |
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
(2) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2016 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
From: Michael P. <mp...@pl...> - 2011-04-06 19:20:46
|
This email is an announcement of sorts for some work I've got planned for HTML::Template. I'm greatly in debt to Sam Tregar for this module and the use that I've gotten out it over the years. After talking with Sam, he's given me permission to try to further the development of HTML::Template to give some needed features while maintaining the spirit that it was originally written in. That is, to be a fast, straight forward and easy to learn templating engine. To that end, I've got the following goals: + Move HTML::Template development to github. My repo is located at: https://github.com/mpeters/html-template + Use default perltidy settings + Use Dist::Zilla for release management + Go through the current RT queue and do some fixes, updates and triage. + Add a <tmpl_elsif> tag + Add a "format" attribute with built-in and user defined formats: <tmpl_var cost> <tmpl_var cost format="currency"> <tmpl_var cost format="number"> + User defined escapes + Add an encoding param to more easily handle UTF8/Unicode. + Break out parsing of templates into HTML::Template::Parser so that templates can be parsed and manipulated outside of rendering. And use HTML::Template::Parser internally in HTML::Template. And for HTML::Template::Expr I want to do: + Allow boolean "!" in expressions for things like: <tmpl_if expr="foo && !bar">...</tmpl_if> + Allow "||" to work more like Perl's "||" when used in a <tmpl_var> : <tmpl_var expr="foo || bar"> Other ideas I'm on the fence about: + Like HTML::Template::Plugin::Dot allow methods to be called on objects: <tmpl_var start_date.mdy('-')> + Add a <tmpl_set> tag. Could be useful for template driven behaviors (combined with param() or query()) or when combined with <tmpl_include>: Any questions? Comments? Verbal Abuse? Any offers of help? Thanks, -- Michael Peters Plus Three, LP |
From: Alex T. <al...@ac...> - 2011-02-01 16:51:41
|
On Tue, 1 Feb 2011 15:41:58 +0000, Roger Burton West wrote > On Tue, Feb 01, 2011 at 05:14:36PM +0200, Offer Kaye wrote: > > >Is there any other solution? > > You've covered the two most usual approaches. Anything else will involve > processing the string you get from the output() function. $htmltemplatefilters = [ # remove any space at the start of a line if it is immediately before a tmpl tag { sub => sub { my $text_aref = shift; s#^[\t ]+(</?tmpl_[^>]+>)#$1#gi for @{$text_aref} }, format => 'array' }, # remove any \n and \r following a tmpl tag { sub => sub { my $text_ref = shift; $$text_ref =~ s#(</?tmpl_[^>]+>)[\r\n]+#$1#sgi }, format => 'scalar' }, ]; my $template = HTML::Template->new( filename => get_template('example.tmpl'), filter => $htmltemplatefilters, ); thats how we handle it. So our code is readable, but the output result is formatted correctly. HTH, Alex |
From: Roger B. W. <ro...@fi...> - 2011-02-01 16:06:29
|
On Tue, Feb 01, 2011 at 05:14:36PM +0200, Offer Kaye wrote: >Is there any other solution? You've covered the two most usual approaches. Anything else will involve processing the string you get from the output() function. R |
From: Offer K. <off...@gm...> - 2011-02-01 15:14:42
|
Hi H::T users, If I have a section in my template file that looks like: <TMPL_IF NAME="foo"> content when foo is true </TMPL_IF> more content This section will be reduced (in the case of 'foo' being false) to an empty line followed by "more content" on the next line. As I'm using HTML::Template for non-HTML purposes I do care about final output formatting and the empty line is ugly. On the other hand trying to make sure I don't get an empty line leads to the following uglier solution: <TMPL_IF NAME="foo">content when foo is true\n</TMPL_IF>more content Is there any other solution? Best regards, Offer Kaye |
From: Roger B. W. <ro...@fi...> - 2010-09-24 12:25:50
|
On Fri, Sep 24, 2010 at 11:38:51AM +0100, Ian Warhurst wrote: >I presume the "pos" numbers are the useful bits but I can't correlate those numbers to any position in the template.. I don't use HTML::Template::Pro but I would assume it's an octet number in the template source file. Use a suitable editor to locate the problem (or just write a program to read the file, skip forward, and print a few lines for context). R |
From: Ian W. <ia...@cr...> - 2010-09-24 10:59:05
|
Hi Can anyone tell me, when you get an error like (from the Apache error log in this case): [Fri Sep 24 11:11:43 2010] [error] HTML::Template::Pro:in TMPL_IF at pos 10056: end tag:found < instead of > at pos 10080, referer: ..... how I can find where in my template the error is occuring? I presume the "pos" numbers are the useful bits but I can't correlate those numbers to any position in the template.. Anyone know? Thanks Ian |
From: Michael P. <mp...@pl...> - 2010-07-06 02:42:17
|
On 07/05/2010 04:49 PM, Justin Skazat wrote: >> Mat, if you could share your patch that adds this feature that would be great. > > This has it: > > http://search.cpan.org/~tinita/HTML-Template-Compiled-0.94/lib/HTML/Template/Compiled.pm#ADDITIONAL_FEATURES But it doesn't have full query support. -- Michael Peters Plus Three, LP |
From: Justin S. <ju...@sk...> - 2010-07-05 22:36:34
|
> Mat, if you could share your patch that adds this feature that would be great. This has it: http://search.cpan.org/~tinita/HTML-Template-Compiled-0.94/lib/HTML/Template/Compiled.pm#ADDITIONAL_FEATURES Justin On Jul 5, 2010, at 9:23 AM, Alex Teslik wrote: > I would love to see this feature. Supporting TMPL_IF and supporting TMPL_ELSE but not supporting > TMPL_ELSIF seems very bizarre to me. Just sayin. > > Mat, if you could share your patch that adds this feature that would be great. > > Thanks, > Alex > >> On 3 July 2010 01:52, Alan Laas <al...@vi...> wrote: >> >>> One thing that would be nice to have is a <TMPL_ELSIF> tag. I know you >>> can accomplish the same thing with something like this but it just gets >>> cumbersome to nest them if you have a long string: >>> >>> <TMPL_IF> >>> >>> <TMPL_ELSE> >>> >>> <TMPL_IF> >>> >>> <TMPL_ELSE> >>> >>> </TMPL_IF> >>> </TMPL_IF> >>> >>> >>> -------------------------------------------------------------------------- > ---- >>> This SF.net email is sponsored by Sprint >>> What will you do first with EVO, the first 4G phone? >>> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first >>> _______________________________________________ >>> Html-template-users mailing list >>> Htm...@li... >>> https://lists.sourceforge.net/lists/listinfo/html-template-users >>> > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users > |
From: Alex T. <al...@ac...> - 2010-07-05 15:41:30
|
I would love to see this feature. Supporting TMPL_IF and supporting TMPL_ELSE but not supporting TMPL_ELSIF seems very bizarre to me. Just sayin. Mat, if you could share your patch that adds this feature that would be great. Thanks, Alex > On 3 July 2010 01:52, Alan Laas <al...@vi...> wrote: > > > One thing that would be nice to have is a <TMPL_ELSIF> tag. I know you > > can accomplish the same thing with something like this but it just gets > > cumbersome to nest them if you have a long string: > > > > <TMPL_IF> > > > > <TMPL_ELSE> > > > > <TMPL_IF> > > > > <TMPL_ELSE> > > > > </TMPL_IF> > > </TMPL_IF> > > > > > > -------------------------------------------------------------------------- ---- > > This SF.net email is sponsored by Sprint > > What will you do first with EVO, the first 4G phone? > > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > > _______________________________________________ > > Html-template-users mailing list > > Htm...@li... > > https://lists.sourceforge.net/lists/listinfo/html-template-users > > |
From: Mathew R. <mat...@gm...> - 2010-07-05 00:43:28
|
If you have a look at the H::T forum history, you can find many examples of this request, see here: http://www.mail-archive.com/htm...@li.../info.html On 3 July 2010 01:52, Alan Laas <al...@vi...> wrote: > One thing that would be nice to have is a <TMPL_ELSIF> tag. I know you > can accomplish the same thing with something like this but it just gets > cumbersome to nest them if you have a long string: > > <TMPL_IF> > > <TMPL_ELSE> > > <TMPL_IF> > > <TMPL_ELSE> > > </TMPL_IF> > </TMPL_IF> > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users > |
From: Alan L. <al...@vi...> - 2010-07-02 16:54:42
|
One thing that would be nice to have is a <TMPL_ELSIF> tag. I know you can accomplish the same thing with something like this but it just gets cumbersome to nest them if you have a long string: <TMPL_IF> <TMPL_ELSE> <TMPL_IF> <TMPL_ELSE> </TMPL_IF> </TMPL_IF> |
From: Cody F. <cod...@gm...> - 2010-04-24 04:47:33
|
> loop_context_vars is pretty cheap so just use them, > global_vars can be expensive if you have lots of loops and sub-loops and > sub-sub-loops, etc. with big pages. Fair enough. I don't have any kind of nested loop, it's all fairly simple. > ...if it doesn't work and its not documented, then dont do that. Or just > create a H::T when you actually want to use it... To be honest, my code probably needs rethinking, it works like 1) Determine run-mode 2) Create H::T and using the template file for that run-mode 3) Lots of other more complicated stuff dependent on conditions So yes, it could probably go another way. |
From: Mathew R. <mat...@gm...> - 2010-04-23 05:00:16
|
...if it doesn't work and its not documented, then dont do that. Or just create a H::T when you actually want to use it... loop_context_vars is pretty cheap so just use them, global_vars can be expensive if you have lots of loops and sub-loops and sub-sub-loops, etc. with big pages. See here: http://www.mail-archive.com/htm...@li.../msg02267.html |
From: Cody F. <cod...@gm...> - 2010-04-23 01:51:49
|
I posted this question on PerlMonks and didn't get any replies ... I've got some code where I create an HTML::Template object at the top, and then later on, may want to use the options loop_context_vars or global_vars depending on conditionals. There's nothing in the POD about doing it that, way. But by dumping the HTML::Template object, I could see that these could be accessed like this: $t->{options}->{loop_context_vars} = 1; $t->{options}->{global_vars} = 1; [download] interestingly, it works for loop_context_vars but not global_vars Is there a reason for this? Can I do it a different way? Or alternatively, should I just turn them both on, even if they're not needed, and not try and do it conditionally? I was just being naturally conservative about turning on features which wouldn't be needed, that's all. Is there any kind of speed or performance implication to using these features? Example code: use HTML::Template; $t = HTML::Template->new( filehandle => *DATA, die_on_bad_params => 0 ); $t->{options}->{loop_context_vars} = 1; # turned on so I can use <tmpl_if name="__first__"> $t->{options}->{global_vars} = 1; # turned on so I can have a global var appear inside a loop $t->param( foo => [ { baz => 1 }, { baz => 2 }, { baz => 3 } ] ); # some loop data $t->param( bar => 'global var!' ); # a global variable print $t->output(); __DATA__ <tmpl_loop name="foo"> <tmpl_var name="bar"> <!-- this doesn't appear --> <tmpl_if name="__first__"> first! </tmpl_if> * <tmpl_var name="baz"> </tmpl_loop> |
From: Shawn S. <sha...@gm...> - 2010-04-09 00:32:32
|
Wow, embarrassing I missed that? At any rate thanks for all the quick replies. On Thu, Apr 8, 2010 at 5:30 PM, Lyle <web...@co...> wrote: > Problem with your hash scoping:- > > > my @error = @_; my @error_loop = (); > print header; > foreach (@error) { > my %error_data; > > $error_data{ERROR_DATA} = $_; > push(@error_loop, \%error_data); > } > > > -- To argue with a person who has renounced the use of reason is like administering medicine to the dead. Thomas Paine |
From: Sam T. <sa...@tr...> - 2010-04-08 23:41:13
|
Put the 'my %error_data;' inside the loop. You're pushing a reference to the same hash over and over again. -sam On Thu, Apr 8, 2010 at 5:20 PM, Shawn Scott <sha...@gm...> wrote: > Good Afternoon, > > I have been using HTML::Template for some time and have recently run into > an starnge issue. I have the following code > > my @error = @_; > my @error_loop = (); > my %error_data; > print header; > foreach (@error) { > $error_data{ERROR_DATA} = $_; > push(@error_loop, \%error_data); > } > my $template = HTML::Template->new(filename => > "$html_root/signup_error.html"); > $template->param(ERROR_LOOP => \@error_loop); > print $template->output; > > When I run this code it gives me the correct number of elements, based on > the number of errors in the loop @error array. The only issue each one is > shown as the last line pushed to the @error_loop. If I change the code to > this > > foreach (@error) { > print p"DEBUG - $_\n"; > $error_data{ERROR_DATA} = $_; > push(@error_loop, \%error_data); > } > I get the correct vaules printing out in the debug print line but then the > actual template loop variables are wrong. > > Any help would be great. > > > > > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users > > |
From: Alex T. <al...@ac...> - 2010-04-08 22:44:50
|
On Thu, 8 Apr 2010 17:20:36 -0400, Shawn Scott wrote > Good Afternoon, > > I have been using HTML::Template for some time and have recently run > into an starnge issue. I have the following code > > my @error = @_; > my @error_loop = (); > my %error_data; > print header; > foreach (@error) { > $error_data{ERROR_DATA} = $_; > push(@error_loop, \%error_data); > } > my $template = HTML::Template->new(filename => > "$html_root/signup_error.html"); > $template->param(ERROR_LOOP => \@error_loop); > print $template->output; Each entry in your @error_loop is looking by reference at the %error_data hash key ERROR_DATA. So you are not storing the actual data in @error_loop, just a reference to the ERROR_DATA hash key in %error_data. That hash key takes the last value of the @error_loop during the foreach - and then all the references pointing to that key look the same. You are using a lot of variables, sigils, metacharacters, and capitalization that you don't need. It makes the code hard to read. It could be cleaner: my @errors = @_; my $template = HTML::Template->new(filename => "errors.html"); $template->param ( errorloop => [ map { { error => $_ } } @errors ], ); print header(); print $template->output; untested. HTH, Alex |
From: Roger B. W. <ro...@fi...> - 2010-04-08 22:13:30
|
On Thu, Apr 08, 2010 at 05:20:36PM -0400, Shawn Scott wrote: >When I run this code it gives me the correct number of elements, based on >the number of errors in the loop @error array. The only issue each one is >shown as the last line pushed to the @error_loop. Well, yes. You're defining a single hash and pushing multiple references to it. Chech out perldoc perlref... For this specific problem, cut out the middleman: my @error = @_; my @error_loop = (); print header; foreach (@error) { push(@error_loop, {ERROR_DATA => $_}); } my $template = HTML::Template->new(filename => "$html_root/signup_error.html"); $template->param(ERROR_LOOP => \@error_loop); print $template->output; Roger |
From: Lyle <web...@co...> - 2010-04-08 21:55:32
|
Problem with your hash scoping:- my @error = @_; my @error_loop = (); print header; foreach (@error) { my %error_data; $error_data{ERROR_DATA} = $_; push(@error_loop, \%error_data); } |
From: Shawn S. <sha...@gm...> - 2010-04-08 21:20:43
|
Good Afternoon, I have been using HTML::Template for some time and have recently run into an starnge issue. I have the following code my @error = @_; my @error_loop = (); my %error_data; print header; foreach (@error) { $error_data{ERROR_DATA} = $_; push(@error_loop, \%error_data); } my $template = HTML::Template->new(filename => "$html_root/signup_error.html"); $template->param(ERROR_LOOP => \@error_loop); print $template->output; When I run this code it gives me the correct number of elements, based on the number of errors in the loop @error array. The only issue each one is shown as the last line pushed to the @error_loop. If I change the code to this foreach (@error) { print p"DEBUG - $_\n"; $error_data{ERROR_DATA} = $_; push(@error_loop, \%error_data); } I get the correct vaules printing out in the debug print line but then the actual template loop variables are wrong. Any help would be great. |
From: Brad B. <bm...@ma...> - 2009-12-10 18:34:39
|
Hi all, The other day, one of my templates started doing something mysterious. I couldn't figure it out for a good while. After a night's sleep, the explanation occurred to me, and I thought I'd share it, in case it helps someone else. Below is some code that demonstrates what was mysterious. The first subroutine, var_test() shows that you can set a TMPL_VAR from outside a TMPL_LOOP, as long as you include global_vars=>1. This works even if the TMPL_VAR does not appear elsewhere in the template outside the loop. The second subroutine, loop_test1() shows that you can also set a TMPL_LOOP from outside another TMPL_LOOP, as long as you again include global_vars=>1, but--and here's the mystery--only as long as the one TMPL_LOOP *also* appears in the template somewhere *outside* the other loop. The third subroutine, loop_test2() is just like loop_test1(), except that the trees TMPL_LOOP *only* appears *inside* the forest loop. Because of this (apparently), the values in the trees loop are not set by H::T->param(). So the mystery was that my TMPL_VAR (global) settings were showing up inside my loop (even when they didn't appear anywhere else in the template), but my TMPL_LOOP ("global") settings where disappearing from inside my loop when I removed them from elsewhere in the template. Very much head scratching occurred. This is an obscure problem, and reorganizing the template and the code was dead simple. But I just had to track down the explanation so I would know what to avoid next time. The use case where this came up was a spreadsheet report with subtotals and grand totals. I was using the labels from the grand totals loop for each of the sub-groups. When I wanted to use the same code to generate a report for just one sub-group, without grand totals, I removed the grand totals loop from the bottom of the template, and all of a sudden the labels for the one sub-group just disappeared. Regards, Brad #!/usr/local/bin/perl use strict; use warnings; use HTML::Template; var_test(); # [maple trees, rotten logs] loop_test1(); # [maple trees, rotten logs] {maple trees} loop_test2(); # [ trees, rotten logs] #--------------------------------------------------------------------- # want to use short-hand tags TV => TMPL_VAR, TL => TMPL_LOOP sub filter { for( ${$_[0]} ) { s| <TV (.*?)> |<TMPL_VAR $1>|gx; s| <TL (.*?)> |<TMPL_LOOP $1>|gx; s| </TL> |</TMPL_LOOP>|gx; } } #--------------------------------------------------------------------- sub var_test { my $text = "[<TL forest><TV trees> trees, <TV logs> logs</TL>]\n"; my $sref = \$text; my $tmpl = HTML::Template->new( scalarref => $sref, global_vars => 1, die_on_bad_params => 0, # not strictly needed here filter => \&filter, ); # trees var is set "outside" of forest, so needs global_vars=>1 $tmpl->param( trees => 'maple' ); $tmpl->param( forest => [{ logs => 'rotten' }] ); print $tmpl->output; } #--------------------------------------------------------------------- sub loop_test1 { my $text = join '' => "[<TL forest><TL trees><TV type></TL> trees, <TV logs> logs</TL>] ", "{<TL trees><TV type></TL> trees}\n"; my $sref = \$text; my $tmpl = HTML::Template->new( scalarref => $sref, global_vars => 1, die_on_bad_params => 0, # not strictly needed here filter => \&filter, ); # trees loop is set "outside" of forest, so needs global_vars=>1 $tmpl->param( trees => [{ type => 'maple' }] ); $tmpl->param( forest => [{ logs => 'rotten' }] ); print $tmpl->output; } #--------------------------------------------------------------------- sub loop_test2 { my $text = "[<TL forest><TL trees><TV type></TL> trees, <TV logs> logs</TL>]\n"; my $sref = \$text; my $tmpl = HTML::Template->new( scalarref => $sref, global_vars => 1, die_on_bad_params => 0, # definitely needed here filter => \&filter, ); # trees loop is set "outside" of forest, so needs global_vars=>1 # but also needs die_on_bad_param=>0 to avoid error $tmpl->param( trees => [{ type => 'maple' }] ); $tmpl->param( forest => [{ logs => 'rotten' }] ); print $tmpl->output; } __END__ |
From: Brad B. <bm...@ma...> - 2009-11-30 19:45:00
|
FWIW, below is my final version of code to fill in nested templates. It's down to a call to new() and a call to output() in each loop (besides the pattern match). Of course, there's a hidden param operation via the assoc object. Whether or not this benchmarks better, I don't know, but it comes across as simpler IMO. Of course, it introduces a bit of a dummy class for the associate option, but I don't mind that too much. Thanks all, Brad 1 #!/usr/local/bin/perl 2 3 use strict; 4 use warnings; 5 use HTML::Template; 6 7 my $assoc = My::Param->new( 8 { color => 'blue', blue => 'BLUE', BLUE => '**BLUE**' } 9 ); 10 11 my $text = <<__; 12 This is a <TMPL_VAR NAME="color"> bird. 13 This is a <TMPL_VAR NAME="<TMPL_VAR NAME="color">"> bird. 14 This is a <TMPL_VAR NAME="<TMPL_VAR NAME="<TMPL_VAR NAME="color">">"> bird. 15 __ 16 17 my $sref = \$text; 18 my $count; 19 20 while ( $text =~ /<TMPL_/i ) { 21 22 my $tmpl = HTML::Template->new( 23 scalarref => $sref, 24 strict => 0, 25 case_sensitive => 1, 26 associate => $assoc, 27 ); 28 29 $text = $tmpl->output(); 30 31 print "\n".++$count.":\n$text"; # debug 32 } 33 34 print "\nfinal: \n$text"; 35 36 package My::Param; 37 sub new { bless $_[1], $_[0] } 38 sub param { my $self = shift; 39 return keys %$self if wantarray; 40 return $self->{ $_[0] } } 41 42 __END__ 1: This is a blue bird. This is a <TMPL_VAR NAME="blue"> bird. This is a <TMPL_VAR NAME="<TMPL_VAR NAME="blue">"> bird. 2: This is a blue bird. This is a BLUE bird. This is a <TMPL_VAR NAME="BLUE"> bird. 3: This is a blue bird. This is a BLUE bird. This is a **BLUE** bird. final: This is a blue bird. This is a BLUE bird. This is a **BLUE** bird. |
From: Brad B. <bm...@ma...> - 2009-11-30 19:26:09
|
On Mon, Nov 30, 2009 at 1:30 PM, <bri...@ba...> wrote: > I believe that a call to $assoc->param() should return the list of parameters that the object will understand. > > E.g, in this instance, $assoc->param() would return ( "color" ); > > Brian > Ah yes, I see. Changing that did the trick. Thanks! (And thanks to Roger, too, for a similar pointer.) Brad |
From: Roger B. W. <ro...@fi...> - 2009-11-30 18:43:33
|
On Mon, Nov 30, 2009 at 01:14:27PM -0500, Brad Baxter wrote: >In the code below, I'm using a My::Param object that has >a param() method that "works like HTML::Template's param()" >as regards a get operation (which is all I'd expect it to >need). Does it have to be more than that? Hrm, I'd expect at the very least it would need to be able to return a list of parameters (when called in scalar context). UTSL, and down in sub output we see: map { $case_map{$associated_object}{lc($_)} = $_ } $associated_object->param(); -- (garbage below inserted by sourceforge) |
From: Brad B. <bm...@ma...> - 2009-11-30 18:14:57
|
On Mon, Nov 30, 2009 at 12:33 PM, Brad Baxter <bm...@ma...> wrote: > In my experiments with nested templates, I tried > some trickery using associate to avoid the extra > param() calls. However, I've come across an unexpected > result (at least, unexpected to me). Okay, now I'm just confused. Can someone tell me what I'm doing wrong in the code below? In the H::T docs, I read this: "associate - this option allows you to inherit the parameter values from other objects. The only requirement for the other object is that it have a param() method that works like HTML::Template's param()." In the code below, I'm using a My::Param object that has a param() method that "works like HTML::Template's param()" as regards a get operation (which is all I'd expect it to need). Does it have to be more than that? Regards, Brad 1 #!/usr/local/bin/perl 2 3 use strict; 4 use warnings; 5 use HTML::Template; 6 7 my $text = qq'This is a <TMPL_VAR NAME="color"> bird.\n'; 8 9 my $assoc = My::Param->new( { color => 'blue' } ); 10 print "Testing: ".$assoc->param( 'color' )."\n"; 11 12 my $tmpl = HTML::Template->new( 13 scalarref => \$text, 14 associate => $assoc, 15 ); 16 17 print $tmpl->output(); 18 19 package My::Param; 20 sub new { bless $_[1], $_[0] } 21 sub param { $_[0]->{ $_[1] } } 22 23 __END__ 24 Use of uninitialized value in hash element at ./qt line 21. 25 Testing: blue 26 This is a bird. |