in reply to Reusable template components with HTML::Template

Or, instead of reinventing this functionality on top of a restrictive templating engine, you use one with a more powerful language such as the Template Toolkit, where you get reusability simply by defining the table template in a [% BLOCK foo %][% END %] and referring to it by [% INCLUDE foo %]. (You can pass parameters, as well. You could put the block in another file. And those are just some of the available options.)

Don't get me wrong, I used to be a fan of the restrictive approach. But at some point you realize that the templating engine really can't separate application logic from presentation logic for you, and that using a restrictive templating language just makes you jump through unnecessary hoops. I also find that if the templating language is not powerful enough, then presentation logic seeps back into the application — just like you just demonstrated.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^2: Reusable template components with HTML::Template
by dws (Chancellor) on Aug 04, 2004 at 01:58 UTC

    Or, ... you use one with a more powerful language such as the Template Toolkit

    Template Toolkit is a fine piece of work, but using it has drawbacks in some contexts. Non-programmers have a difficult time coping with it*. It raises a barrier to understanding, and hence a barrier to the willingness of designers to edit templates. And the risk of mal-edits by non programmers is higher. The technique of isolating components helps.

    <TMPL_VAR ESCAPE=0 stuff>
    is fairly easy for a non-programmer to work around. Templates used by components are harder to deal with, but designers spend their time at the page level, at least in my experience.

    The general problem is shared by JSP, ASP, and other schemes.


    *Amended to say that this has been my experience. YMMV.

      I have to say, although I have had success with HTML::Template and continue to use it, I totally disagree with your criticisms of Template Toolkit. I have used it with groups of HTML coders who have no programming experience beyond basic cut-and-paste JavaScript. They had absolutely no problems understanding it. In fact, they soon started asking me to show them some of the fancier features that I had left out, thinking they would be overwhelmed.

      I hear this criticism frequently and I think it comes from people who have never tried using TT with designers. The TT syntax is nearly identical to HTML::Template for all common constructs, and the ability to pass parameters to a template makes the kind of reuse being discussed here a whole lot easier.