Thread: [htmltmpl] Leaving tmp_var intact inside template
Brought to you by:
samtregar
From: city c. <cit...@ho...> - 2008-07-28 20:18:48
|
I am creating a HTML template that I want populate only some of the variables (TMPL_VARs) in it, then output it to a file that I will call again at a later date to populate the rest of the variables. So basically I want to escape some of the TMPL variables so they can be populated on the second pass. eg. <DIV> <TMPL_VAR NAME="title_pass1"> <TMPL_VAR NAME="content_pass2"> <TMPL_VAR NAME="footer_pass1"> </DIV> The only solutions i can think of is to set the second pass of vars to <TMPL_VAR NAME=test> and either: 1. output the first pass to a file, then call the new template with the filter param which converts all /<TMPL/<TMPL/g. I don't like this way as it has to run a regexp subst on each template as it's loaded, and the second pass is the one that is used more often, the first pass is just to create the structure for the second pass. 2. store template output into a scalar and to a regexp subst on the scalar before printint that to the file. my $templateRef = $template->output; $templateRef =~ s/<TMPL_/<TMPL_/g; print TEMP $templateRef; As I am writing this I think I'm going to go with solution 2 as it outputs the file and doesn't require any filter on loading the second template. Any feedback on this would be great though, otherwise maybe this might help someone else who is looking for a similar solution. Grant _________________________________________________________________ Windows Live Messenger treats you to 30 free emoticons - Bees, cows, tigers and more! http://livelife.ninemsn.com.au/article.aspx?id=567534 |
From: Michael P. <mp...@pl...> - 2008-07-28 21:14:54
|
city crew wrote: > 2. store template output into a scalar and to a regexp subst on the > scalar before printint that to the file. > > my $templateRef = $template->output; > $templateRef =~ s/<TMPL_/<TMPL_/g; > print TEMP $templateRef; > > As I am writing this I think I'm going to go with solution 2 as it > outputs the file and doesn't require any filter on loading the second > template. We do something similar to your #2. We use a slightly more obvious syntax though. We use <TMPL_VAR> for things that are being loaded on the first pass and <DYN_VAR> for things on the 2nd pass. Just FYI, I've heard this technique named a couple of different things, in case you want to impress anyone :) It's usually called "2 pass templating" or "Write-thru cache templating". -- Michael Peters Plus Three, LP |
From: city c. <cit...@ho...> - 2008-07-28 21:29:57
|
> Date: Mon, 28 Jul 2008 17:13:58 -0400> Subject: Re: [htmltmpl] Leaving tmp_var intact inside template> > city crew wrote:> > > 2. store template output into a scalar and to a regexp subst on the > > scalar before printint that to the file.> > > > my $templateRef = $template->output;> > $templateRef =~ s/<TMPL_/<TMPL_/g;> > print TEMP $templateRef;> > > > As I am writing this I think I'm going to go with solution 2 as it > > outputs the file and doesn't require any filter on loading the second > > template.> > We do something similar to your #2. We use a slightly more obvious > syntax though. We use <TMPL_VAR> for things that are being loaded on the > first pass and <DYN_VAR> for things on the 2nd pass. I like that, I was experimenting with !TMPL_VAR but yours seems more semantically appealing. (I'm practicing my impressive technical speak there...) > > Just FYI, I've heard this technique named a couple of different things, > in case you want to impress anyone :) It's usually called "2 pass > templating" or "Write-thru cache templating". Nice! I'll try impress my wife with "Write-thru cache templating", maybe I'll get lucky. =o) Grant > > -- > Michael Peters> Plus Three, LP> _________________________________________________________________ Want to help Windows Live Messenger plant more Aussie trees? http://livelife.ninemsn.com.au/article.aspx?id=443698 |
From: Vijay R. <vij...@po...> - 2008-07-28 21:45:38
|
I've done a similar thing, albeit in a very different circumstance (having "templates" within templates, that get sent with an ajax-form and populated by a response from CGI::Ajax, sent back to the dom, and stuck in wherever they are supposed to go). In this case, I need to keep the <TMPL_VAR WHATEVER> information in that format, so when the template-chunk gets sent back to perl, it can be seen as such, filled in as necessary, and returned as a populated template. To accomplish this, I rewrite any and all tmpl_vars within a certain div id, something like $div_html = s/<(\/?)TMPL_(.*?)\s*(.*?)> /__$1TMPL_$2 $3__/ig (turning < and > into __ ) and then rewrite this upon receiving the template-chunk, before parsing it. It works well enough, although it is a bit nasty introducing randomly-chosen syntax... On 7/28/08 5:29 PM, "city crew" <cit...@ho...> wrote: > Date: Mon, 28 Jul 2008 17:13:58 -0400 > Subject: Re: [htmltmpl] Leaving tmp_var intact inside template > > city crew wrote: > > > 2. store template output into a scalar and to a regexp subst on the > > scalar before printint that to the file. > > > > my $templateRef = $template->output; > > $templateRef =~ s/<TMPL_/<TMPL_/g; > > print TEMP $templateRef; > > > > As I am writing this I think I'm going to go with solution 2 as it > > outputs the file and doesn't require any filter on loading the second > > template. > > We do something similar to your #2. We use a slightly more obvious > syntax though. We use <TMPL_VAR> for things that are being loaded on the > first pass and <DYN_VAR> for things on the 2nd pass. I like that, I was experimenting with !TMPL_VAR but yours seems more semantically appealing. (I'm practicing my impressive technical speak there...) > > Just FYI, I've heard this technique named a couple of different things, > in case you want to impress anyone :) It's usually called "2 pass > templating" or "Write-thru cache templating". Nice! I'll try impress my wife with "Write-thru cache templating", maybe I'll get lucky. =o) Grant > > -- > Michael Peters > Plus Three, LP > ________________________________ Click here. Want to help Windows Live Messenger plant more Aussie trees? <http://livelife.ninemsn.com.au/article.aspx?id=443698> |
From: Brad B. <bm...@ma...> - 2008-07-29 13:01:47
|
On Mon, Jul 28, 2008 at 5:29 PM, city crew <cit...@ho...> wrote: > > I like that, I was experimenting with !TMPL_VAR but yours seems more > semantically appealing. (I'm practicing my impressive technical speak > there...) > Using !TMPL_VAR would allow for "3-pass" or "n-pass" templating. That is, change !TMPL_VAR to TMPL_VAR on each pass. If you then have !!TMPL_VAR, it survives to the third pass. I actually do this (albeit with a different templating system), though I can recall only a couple of times I ever needed !!. Brad |
From: Roger B. W. <ro...@fi...> - 2008-08-03 15:54:40
|
On Tue, Jul 29, 2008 at 09:01:45AM -0400, Brad Baxter wrote: >Using !TMPL_VAR would allow for "3-pass" or "n-pass" templating. That >is, change !TMPL_VAR to TMPL_VAR on each pass. If you then have >!!TMPL_VAR, it survives to the third pass. > >I actually do this (albeit with a different templating system), though I can >recall only a couple of times I ever needed !!. I'm using something similar at work - though my syntax is "2MPL_VAR" (which is similarly extensible, though I haven't needed a 3-pass system yet). The entire static page tree of the site is run through an H::T pass before upload to generate navigation data (headers, footers, etc.), so any actual template-based content needs special treatment. Roger |