[htmltmpl] Including templates via parameter vs <tmpl_include>
Brought to you by:
samtregar
From: Josh C. <jos...@mi...> - 2005-10-21 11:08:44
|
Hi, I'm curious about what method folks use to combine several templates into a single web page. The <tmpl_include> syntax obviously addresses this. But it seems tempting in some cases to create a new HTML::Template object for each template and include its output into a single "master" template as a parameter, rather than via <tmpl_include>. I imagine this is somewhat more expensive than includes. Significantly so? Particularly in a CGI environment? Other downsides? In a nutshell, it seems like this approach makes template maintenance easier by reducing duplication and, probably, the overall amount of template markup: 1) Encapsulation of parameters for reuse of templates. For example, I'd like to create a single template that handles form generation. But if I want to include several forms in a page (and they don't stack up nicely enough to fit a <tmpl_loop> pattern), then I can't use the same form template via <tmpl_include> because, of course, the template would use the same parameters for all three instances. But if I generate the html beforehand via several different $tmpl->output calls and pass that result to a template in parameters, then I can reuse the same template. 2) Nesting templates to reduce duplication within templates Generating included values via separate template objects lets me do something like this: a) Create html for two forms with a single form template. b) Include the forms as parameters to a screen/runmode template. c) Include the html of the runmode template into a master "wrapper" template. Some simple templates to illustrate that last example example... ** Master template: <html> <head> <title> <tmpl_var name="page_title"> </title> </head> <body> <h1> <tmpl_var name="page_title"> </h1> <tmpl_var name="page_content"> </body> </html> ---------- ** The "page_content" parameter gets generated by the appropriate screen/runmode template: <div id="column1"> <tmpl_var name="intro_text"> <tmpl_var name="form1"> </div> <div id="column2"> <tmpl_var name="form2"> </div> ---------- ** The "form1" and "form2" parameters get generated by the same form template: <form action="<tmpl_var name="action_url">" method="post"> <tmpl_var name="form_title"> <tmpl_loop name="fieldset"> <div class="fieldset"> <h2><tmpl_var name="category_name"></h2> <tmpl_var name="category_description"> <tmpl_loop name="fields"> ... generate input fields ... </tmpl_loop> </div> </tmpl_loop> </form> Thanks for your thoughts and advice! Josh |