Re: [htmltmpl] Nested templates
Brought to you by:
samtregar
From: Brad B. <bm...@ma...> - 2009-11-30 16:55:19
|
Yes, that solves a slightly different problem than my (admittedly somewhat pointless) example, but it doesn't address the nesting that I'm after. I don't do it a lot, but there are key points where I want to, and I like to be able to count on it working. I'd like there to be an option to new() that says, "Do repeated substitutions until there aren't any more". I suspect that would still incur a 'compile' step each time, but I'd hope it could avoid the copy from output() and the repeated param() calls. Thanks, Brad On Wed, Nov 25, 2009 at 10:58 AM, Alex Teslik <al...@ac...> wrote: > On Tue, 24 Nov 2009 21:24:30 -0500, Brad Baxter wrote >> >> Is there a better way? > > I would just do: > > #!/usr/local/bin/perl > > use strict; > use warnings; > use HTML::Template; > > my $template = qq| > This is a <tmpl_var color> bird. > This is a <tmpl_if is_blue>BLUE</tmpl_if> bird. > This is a <tmpl_if is_blue>**BLUE**</tmpl_if> bird. > |; > > # all the logic of what the color will be goes here > my $color = 'blue'; > > my $tmpl = HTML::Template->new( > scalarref => \$template, > strict => 0, > die_on_bad_params => 0, > case_sensitive => 1, > ); > > $tmpl->param( > color => $color, > is_blue => $color eq 'blue' ? 1 : 0, > ); > > print $tmpl->output(); > > So many advantages. The logic is completely separate from the presentation. If you send the template > to a speaker of a different language, they can localize that with no problems. The code is much > shorter at 29 lines vs. 42 lines, and its much more clear to a future maintainer what is happening > without any brain gymnastics. > > HTH, > Alex > -- Brad Baxter ---------------------------------------------------------------------- |