Including templates via parameter vs <tmpl_include>

Josh Clark <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.html-template
Message-ID <[email protected]>
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



-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.