Re: [htmltmpl] extended TMPL_IF / UNLESS syntax
Brought to you by:
samtregar
From: Mathew R. <mat...@re...> - 2004-03-01 03:33:06
|
> > I often find myself generating template code such as: > > > > <TMPL_UNLESS error> > > <TMPL_UNLESS print> > > <TMPL_IF some_var> > > .... do something... > > </TMPL_IF> > > </TMPL_UNLESS> > > </TMPL_UNLESS> >=20 > When I see stuff like that I go into my Perl code and whip up > something like: >=20 > <tmpl_if no_error_and_no_print> > ... do something ... > </tmpl_if> >=20 > <tmpl_if no_error> > ... do something else ... >=20 > <tmpl_if error> > ... do something else entirely ... > </tmpl_if> >=20 > That way the template stays simple and I concentrate the complex logic > in the Perl code where it belongs. If possible I try to find a way to > phrase each condition that doesn't involve boolean logic, which few > non-programmers fully understand. Thats ok - except that since 'error' and 'print' are orthogonal concepts = - the metaphore of not displaying either is really a user-interface = problem, not an application problem. As such, to generate the = 'no_error_and_no_print' value, the programmer would need to either: a) get a set of requirements form the UI guy which states what extra = variables need to be coded up, b) automatically generate arbitrary names for each combination of = template parameters, just in case the UI guy needs them. In either case, we increase coupling between the UI and the backend = application code. > > The equivalent using H::T::E would be: > > > > <TMPL_UNLESS EXPR=3D"((defined error) or (defined print)) and ...."> > > ... do something... > > </TMPL_UNLESS> >=20 > You can write that a little simpler: >=20 > <TMPL_UNLESS EXPR=3D"((error or print) and ...)"> 'error' in scalar context, means something slightly different than = 'defined(error)' - however, you are correct for this rather poor example = of mine... >=20 > > both syntax's are reasonably ugly... >=20 > Beauty is in the eye of the beholder... >=20 > > What about a syntax like: > > > > <TMPL_IF !error,!print,some_var> >=20 > ...which is proven by the fact that I find this much uglier than > either of the two alternatives! touche... cheers, Mathew |