Thread: [htmltmpl] TMPL_IF truth vs definition
Brought to you by:
samtregar
From: Tugrul G. <tu...@ga...> - 2002-06-21 03:14:27
|
Even though I read the documentation for HTML::Template at some point, I had gotten into the habit of using TMPL_IF in the sense of if a variable is defined instead of if it is true. Now 99% of the time this just happens to work, as most defined things are also considered to be true. But that 1% needs to be dealt with. I realize I could do this with H::T::Expr, but I don't want to go that far (and it would require changing a lot of templates ;). And I could start evaluating the defined condition in the code and exporting booleans, but that triggers the valid warning in the documentation about that. And I feel that ifdefined is fundamentally simple enough (almost simpler than if true since its almost not even logic) that it should be included. Now that I've lobbied for my cause :), I know a patch is generally a big help in getting it passed. The question I have is how to proceed: 1) Add a flag to switch TMPL_IF to the alternate behaviour (if defined vs if true) 2) Add another tag TMPL_IFDEF or similar. Tugrul Galatali |
From: Chris D. <Chris.Davies@ManheimEurope.com> - 2002-06-21 10:14:01
|
On Friday, June 21, 2002 3:14 UTC, Tugrul Galatali wrote: > [...] I had gotten into the habit of using TMPL_IF in the sense of if a variable is defined instead of if it is true. Now 99% of the time this just happens to work, as most defined things are also considered to be true. But that 1% needs to be dealt with. > I realize I could do this with H::T::Expr, but I don't want to go that far (and it would require changing a lot of templates ;). And I could start evaluating the defined condition in the code and exporting booleans, but that triggers the valid warning in the documentation about that. > The question I have is how to proceed: > 1) Add a flag to switch TMPL_IF to the alternate behaviour (if defined vs if true) > 2) Add another tag TMPL_IFDEF or similar. I don't really see why you can't take the pain and amend your CGI scripts. What documentation warnings are you referring to, that advise against this course of action? (I can see one warning against matching TMPL_IF to perl if statements, but that doesn't seem to apply.) Consider the H::T snippet, <TMPL_IF NAME="my_bool">...</TMPL_IF> In your CGI, instead of writing simply, { my_bool => $x } you would write something like this, { my_bool => defined $x } Here's a corresponding (trivial) truth table, from which you should be able to take the appropriate expressions: $x defined $x defined $x && $x defined $x && 1 --------------- --------------- --------------- --------------- undef undef "" "" 0 1 0 1 1 1 1 1 2 1 2 1 Chris -- Chris Davies, Manheim Online Tel. 0113 393-2004 Fax. 0870 444-0482. Mobile 07778 199069 |
From: Tugrul G. <tu...@ga...> - 2002-06-21 16:19:34
|
> I don't really see why you can't take the pain and amend your CGI scripts. > What documentation warnings are you referring to, that advise against this > course of action? (I can see one warning against matching TMPL_IF to perl if > statements, but that doesn't seem to apply.) > > Consider the H::T snippet, > <TMPL_IF NAME="my_bool">...</TMPL_IF> > > In your CGI, instead of writing simply, > { my_bool => $x } > > you would write something like this, > { my_bool => defined $x } > I'm taking a short cut by never exporting a boolean. I'm working on the model if the data exists, then include this HTML with the output. So if the conditions are never met (say, a table of people matching a criteria, but there happen to be none), I never set that variable, and therefore I don't want the associated HTML out there. Right now I'd have to stick in a bunch of extra lines to do my_var_bool => 1 wherever I have a my_var => $x in case if ($x) is false. TMPL_IF works all of the time except when the data that exists just happens to be 0 (or anything else that is false). Tugrul Galatali |
From: Kenny S. <ke...@jo...> - 2002-06-21 16:46:54
|
Hi Tugrul, I normally don't jump in on these conversations, but are you really suggesting that TMPL_IF be true if the value of the variable is 0? 0 = true goes against everything computers stand for. > TMPL_IF works all of the time except when the data that exists just > happens to be 0 (or anything else that is false). So, what you are saying is TMPL_IF is false if the data is false. Sounds like it works perfectly to me! Kenny Smith |
From: Tugrul G. <tu...@ga...> - 2002-06-21 17:04:11
|
On Fri, 2002-06-21 at 12:43, Kenny Smith wrote: > Hi Tugrul, > > I normally don't jump in on these conversations, but are you really > suggesting that TMPL_IF be true if the value of the variable is 0? 0 = true > goes against everything computers stand for. > Gah, I should have just made a local hack and kept quiet. 0 might be false to you and me, but to some people its STILL data. If I have some HTML appear only when certain variables are set, instead of creating lots of new boolean variables (since I don't know where a zero might rear its ugly head), I want to just check if the variable is set. Tugrul Galatali |
From: Alex P. <al...@ho...> - 2002-06-21 18:09:16
|
On Fri, 21 Jun 2002, Kenny Smith wrote: > 0 = true goes against everything computers stand for. Except for those silly shell scripts. :P --Alex |
From: Kenny S. <ke...@jo...> - 2002-06-21 18:28:02
|
I see what you're getting at, but in those shell script instances 0 = success, as opposed to true. I can argue semantics too. :) Kenny -----Original Message----- From: htm...@li... [mailto:htm...@li...]On Behalf Of Alex Porras Sent: Friday, June 21, 2002 11:09 AM To: Kenny Smith Cc: Tugrul Galatali; Chris Davies; htm...@li... Subject: RE: [htmltmpl] TMPL_IF truth vs definition On Fri, 21 Jun 2002, Kenny Smith wrote: > 0 = true goes against everything computers stand for. Except for those silly shell scripts. :P --Alex ------------------------------------------------------- Sponsored by: ThinkGeek at http://www.ThinkGeek.com/ _______________________________________________ Html-template-users mailing list Htm...@li... https://lists.sourceforge.net/lists/listinfo/html-template-users |
From: Alex P. <al...@ho...> - 2002-06-21 18:34:55
|
Heyyy, I was just kidding, and point taken after the first time I got the email :) On Fri, 21 Jun 2002, Kenny Smith wrote: > I see what you're getting at, but in those shell script instances 0 = > success, as opposed to true. I can argue semantics too. :) > > Kenny > > -----Original Message----- > From: htm...@li... > [mailto:htm...@li...]On Behalf Of > Alex Porras > Sent: Friday, June 21, 2002 11:09 AM > To: Kenny Smith > Cc: Tugrul Galatali; Chris Davies; > htm...@li... > Subject: RE: [htmltmpl] TMPL_IF truth vs definition > > > On Fri, 21 Jun 2002, Kenny Smith wrote: > > > 0 = true goes against everything computers stand for. > > Except for those silly shell scripts. :P > > --Alex > > > > ------------------------------------------------------- > Sponsored by: > ThinkGeek at http://www.ThinkGeek.com/ > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users > > > > ------------------------------------------------------- > Sponsored by: > ThinkGeek at http://www.ThinkGeek.com/ > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users > -- ----------------------------------------------------------------- Alex Porras | 615-228-2719 | al...@ho... ----------------------------------------------------------------- |
From: Douglas K. <dlk...@rh...> - 2002-06-21 21:17:34
|
On Friday 21 June 2002 09:43 am, you wrote: > Hi Tugrul, > > I normally don't jump in on these conversations, but are you really > suggesting that TMPL_IF be true if the value of the variable is 0? 0 = true > goes against everything computers stand for. > > > TMPL_IF works all of the time except when the data that exists just > > happens to be 0 (or anything else that is false). > > So, what you are saying is TMPL_IF is false if the data is false. Sounds > like it works perfectly to me! > The problem I see with that, is if the TMPL_IF is reading the data. we should be able to see if the data equal a value. If that is a case then there should be something like this: <TMPL_IF NAME="FOO" eq 5> The data is aready known because it knowns that the data is either zero or something else. It should not be that much work to do a test against a value. my 2 cents Douglas |
From: Phil T. <phi...@bi...> - 2002-06-21 21:55:09
Attachments:
debug.txt
|
SSBhbSBnZXR0aW5nIHRoZSBlcnJvciBiZWxvdywgSSB3b3VsZCBiZSBncmF0ZWZ1bCBpZiBzb21l Ym9keSBjb3VsZCBleHBsYWluIHRoZSBwcm9ibGVtLiBJIGhhdmUgYWxzbyBhdHRhY2hlZCBhIGZp bGUgY29udGFpbmluZyB0aGUgc3RhY2sgZGVidWcuDQoNCkFzIGJhY2tncm91bmQsIEkgaGF2ZSBh IHRlbXBsYXRlIHdoaWNoIGNvbnRhaW5zIGEgImNsdWJMaXN0IiB0bXBsX3ZhciAuIFRoaXMgaGFz IGJlZW4gcGFyYW0nZCB3aXRoIGFuIGFycmF5IG9mIGhhc2hlcywgd2hlcmUgZWFjaCBoYXNoIGNv bnRhaW5zICJjbHViSWQiIGFuZCAibmFtZSIuIA0KDQpUaGUgdGhpbmcgd2FzIHdvcmtpbmcgdW50 aWwgSSBzZXQgdGhlIGNhc2Vfc2Vuc2l0aXZlIG9wdGlvbiB0byB0cnVlLiBJIGhhdmUgY2hlY2tl ZCBldnJ5dGhpbmcgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjYXNlIG1pc21hdGNoZXMgLSBJ IHRoaW5rIQ0KDQoNCmNoZWVycw0KDQpwaGlsDQoNCkhUTUw6OlRlbXBsYXRlLT5vdXRwdXQoKSA6 IGZhdGFsIGVycm9yIGluIGxvb3Agb3V0cHV0IDogSFRNTDo6VGVtcGxhdGUgOiBBdHRlbXB0IHRv IHNldCBub25leGlzdGVudCBwYXJhbWV0ZXIgJ2NsdWJpZCcgLSBwaHRoaXMgcGFyYW1ldGVyIG5h bWUgZG9lc24ndCBtYXRjaCBhbnkgZGVjbGFyYXRpb25zIGluIHRoZSB0ZW1wbGF0ZSBmaWxlIDog KGRpZV9vbl9iYWRfcGFyYW1zID0+IDEpIGF0IC91c3IvbGliL3Blcmw1L3NpdGVfcGVybC81LjYu MC9IVE1ML1RlbXBsYXRlLnBtIGxpbmUgMjc4Nw0KIGF0IFZpZXdIYW5kbGVycy9HZW5lcmljLnBt IGxpbmUgNjQNCltGcmkgSnVuIDIxIDE3OjI3OjE5IDIwMDJdIFtlcnJvcl0gW2NsaWVudCAxOTIu MTY4LjEwLjFdIFByZW1hdHVyZSBlbmQgb2Ygc2NyaXB0IGhlYWRlcnM6IC92YXIvd3d3L2NnaS1i aW4vY29udHJvbC5jZ2kNCg0K |
From: Phil T. <phi...@bi...> - 2002-06-22 09:37:39
|
UHJvYmxlbSB3YXMgZml4ZWQgaW4gYSBsYXRlciB2ZXJzaW9uIC0gdGhhbmtzIGFueXdheQ0KDQpw aGlsDQotLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tIA0KRnJvbTogIlBoaWwgVGF5bG9yIiA8 cGhpbC50YXlsb3JAYmlnZm9vdC5jb20+DQpUbzogPEh0bWwtdGVtcGxhdGUtdXNlcnNAbGlzdHMu c291cmNlZm9yZ2UubmV0Pg0KU2VudDogMjEgSnVuZSAyMDAyIDIyOjUyDQpTdWJqZWN0OiBbaHRt bHRtcGxdIFRNUExfTE9PUCBFcnJvcg0KDQoNCj4gSSBhbSBnZXR0aW5nIHRoZSBlcnJvciBiZWxv dywgSSB3b3VsZCBiZSBncmF0ZWZ1bCBpZiBzb21lYm9keSBjb3VsZCBleHBsYWluIHRoZSBwcm9i bGVtLiBJIGhhdmUgYWxzbyBhdHRhY2hlZCBhIGZpbGUgY29udGFpbmluZyB0aGUgc3RhY2sgZGVi dWcuDQo+IA0KPiBBcyBiYWNrZ3JvdW5kLCBJIGhhdmUgYSB0ZW1wbGF0ZSB3aGljaCBjb250YWlu cyBhICJjbHViTGlzdCIgdG1wbF92YXIgLiBUaGlzIGhhcyBiZWVuIHBhcmFtJ2Qgd2l0aCBhbiBh cnJheSBvZiBoYXNoZXMsIHdoZXJlIGVhY2ggaGFzaCBjb250YWlucyAiY2x1YklkIiBhbmQgIm5h bWUiLiANCj4gDQo+IFRoZSB0aGluZyB3YXMgd29ya2luZyB1bnRpbCBJIHNldCB0aGUgY2FzZV9z ZW5zaXRpdmUgb3B0aW9uIHRvIHRydWUuIEkgaGF2ZSBjaGVja2VkIGV2cnl0aGluZyB0byBtYWtl IHN1cmUgdGhlcmUgYXJlIG5vIGNhc2UgbWlzbWF0Y2hlcyAtIEkgdGhpbmshDQo+IA0KPiANCj4g Y2hlZXJzDQo+IA0KPiBwaGlsDQo+IA0KPiBIVE1MOjpUZW1wbGF0ZS0+b3V0cHV0KCkgOiBmYXRh bCBlcnJvciBpbiBsb29wIG91dHB1dCA6IEhUTUw6OlRlbXBsYXRlIDogQXR0ZW1wdCB0byBzZXQg bm9uZXhpc3RlbnQgcGFyYW1ldGVyICdjbHViaWQnIC0gcGh0aGlzIHBhcmFtZXRlciBuYW1lIGRv ZXNuJ3QgbWF0Y2ggYW55IGRlY2xhcmF0aW9ucyBpbiB0aGUgdGVtcGxhdGUgZmlsZSA6IChkaWVf b25fYmFkX3BhcmFtcyA9PiAxKSBhdCAvdXNyL2xpYi9wZXJsNS9zaXRlX3BlcmwvNS42LjAvSFRN TC9UZW1wbGF0ZS5wbSBsaW5lIDI3ODcNCj4gIGF0IFZpZXdIYW5kbGVycy9HZW5lcmljLnBtIGxp bmUgNjQNCj4gW0ZyaSBKdW4gMjEgMTc6Mjc6MTkgMjAwMl0gW2Vycm9yXSBbY2xpZW50IDE5Mi4x NjguMTAuMV0gUHJlbWF0dXJlIGVuZCBvZiBzY3JpcHQgaGVhZGVyczogL3Zhci93d3cvY2dpLWJp bi9jb250cm9sLmNnaQ0KPiANCj4gDQo= |
From: Brian M. <bm...@pa...> - 2002-06-21 22:37:44
|
As mentioned briefly in this thread already, you can do this with HTML::Template::Expr. And you don't have to export booleans or anything like that, you can just use "defined," which works just like the perl function "defined" and happens to be one of the functions available in HTML::Template::Expr. <TMPL_IF EXPR="defined ($test)"> Brian McCain PageMasters Internet Group ----- Original Message ----- From: "Douglas Kirkland" <dlk...@rh...> To: <Htm...@li...> Sent: Friday, June 21, 2002 2:16 PM Subject: Re: [htmltmpl] TMPL_IF truth vs definition | On Friday 21 June 2002 09:43 am, you wrote: | > Hi Tugrul, | > | > I normally don't jump in on these conversations, but are you really | > suggesting that TMPL_IF be true if the value of the variable is 0? 0 = true | > goes against everything computers stand for. | > | > > TMPL_IF works all of the time except when the data that exists just | > > happens to be 0 (or anything else that is false). | > | > So, what you are saying is TMPL_IF is false if the data is false. Sounds | > like it works perfectly to me! | > | The problem I see with that, is if the TMPL_IF is reading the data. we | should be able to see if the data equal a value. If that is a case then | there should be something like this: | | <TMPL_IF NAME="FOO" eq 5> | | The data is aready known because it knowns that the data is either zero or | something else. It should not be that much work to do a test against a value. | | my 2 cents | | Douglas | | | ------------------------------------------------------- | Sponsored by: | ThinkGeek at http://www.ThinkGeek.com/ | _______________________________________________ | Html-template-users mailing list | Htm...@li... | https://lists.sourceforge.net/lists/listinfo/html-template-users | |
From: Sam T. <sa...@tr...> - 2002-06-22 20:48:09
|
On Fri, 21 Jun 2002, Douglas Kirkland wrote: > The problem I see with that, is if the TMPL_IF is reading the data. we > should be able to see if the data equal a value. If that is a case then > there should be something like this: > > <TMPL_IF NAME="FOO" eq 5> Use HTML::Template::Expr and spell that: <tmpl_if expr="foo eq 5"> And your wish is granted. But don't you really mean: <tmpl_if expr="foo == 5"> ? -sam |
From: Stefan S. <ni...@de...> - 2002-06-21 18:45:25
|
> I'm taking a short cut by never exporting a boolean. I'm working on the >model if the data exists, then include this HTML with the output. So if >the conditions are never met (say, a table of people matching a >criteria, but there happen to be none), I never set that variable, and >therefore I don't want the associated HTML out there. > > Right now I'd have to stick in a bunch of extra lines to do my_var_bool >=> 1 wherever I have a my_var => $x in case if ($x) is false. > > TMPL_IF works all of the time except when the data that exists just >happens to be 0 (or anything else that is false). > > > I was first sceptical about this when reading but there is one argument why something like a TMPL_IFDEF might have some sense: I think it would be better for keeping presentation and programm seperated. Currently you have to do something in your script (creating these boolean variables) just to support the presentation which should be done by a different layer (templates). Stefan "Nine" Seifert |
From: Sam T. <sa...@tr...> - 2002-06-22 20:43:46
|
On 20 Jun 2002, Tugrul Galatali wrote: > And I feel that ifdefined is fundamentally simple enough (almost > simpler than if true since its almost not even logic) that it should be > included. I disagree. Ternary logic (where there are three logical values true, false and unknown) is NOT commonly understood by non-programmers. Thus, I don't think this is a good candidate for the default syntax. However, it's easy to do with HTML::Template::Expr. If you don't like writing <tmpl_if expr="defined(foo)"> then just write a filter to change "<tmpl_if_defined foo>" (or whatever you like) into it. -sam |
From: Tugrul G. <tu...@ga...> - 2002-06-23 23:55:54
|
On Sat, 2002-06-22 at 15:54, Sam Tregar wrote: > I disagree. Ternary logic (where there are three logical values true, > false and unknown) is NOT commonly understood by non-programmers. Thus, I > don't think this is a good candidate for the default syntax. Three values? I'm only thinking two here, exists and does not exist. > However, it's easy to do with HTML::Template::Expr. If you don't like > writing <tmpl_if expr="defined(foo)"> then just write a filter to change > "<tmpl_if_defined foo>" (or whatever you like) into it. Now that I've read the code, the thing is that you already check if something is defined, and then you check if its true. I just want to be able to turn off the check if its true. I don't care if its true or false, just if it exists. I don't see the point in taking whatever performance hit/complexity filters and H::T::Expr introduce when what I want is already there :) Also, does the H::T::Expr solution work with JIT? Tugrul Galatali |
From: Sam T. <sa...@tr...> - 2002-06-24 00:10:34
|
On 23 Jun 2002, Tugrul Galatali wrote: > On Sat, 2002-06-22 at 15:54, Sam Tregar wrote: > > I disagree. Ternary logic (where there are three logical values true, > > false and unknown) is NOT commonly understood by non-programmers. Thus, I > > don't think this is a good candidate for the default syntax. > > Three values? I'm only thinking two here, exists and does not exist. Oh. I assumed you were proposing we add support for a defined()-type operator. That would give the template syntax a ternary logic. > Now that I've read the code, the thing is that you already check if > something is defined, and then you check if its true. I just want to be > able to turn off the check if its true. I don't care if its true or > false, just if it exists. I guess you should use a private patch then. I don't see this as a general enough need to make it worth adding to HTML::Template. > Also, does the H::T::Expr solution work with JIT? Not yet. I intend to add support sometime after I finish support for all of HTML::Template's options. -sam |