Thread: [htmltmpl] Global Vars - not for all variables
Brought to you by:
samtregar
From: Steffen Z. <sze...@tf...> - 2003-07-28 21:01:08
|
Hi there, what I'm looking for are global vars. I know, that there is an options. = But if your templates becoming really big, with many vars, the parsing = isn't pretty fast. The problem I have with the option global vars is, = that every variable is global. I'd like to have some specific variables = as global variables. Is there already a solution for that problem? If not, what do you think = about this as a new feature for the next version of HTML-Template? Greets |
From: simran <sim...@re...> - 2003-07-28 23:38:30
|
Sounds like a mighty fine feature to me. Something i can see myself using quite a bit.... I have a few scenarios myself where i want one or two particular variables to be global, but not the rest, currently, i iterate over my loop structure and insert the global variable into every "row". The above feature would take away the need for this. What think ye Sam? How would something like this suit, if global_vars is set to an arrayref containing strings of variables that should be global, then only those variables are global? On Tue, 2003-07-29 at 07:13, Steffen Zeidler wrote: > Hi there, > > what I'm looking for are global vars. I know, that there is an > options. But if your templates becoming really big, with many > vars, the parsing isn't pretty fast. The problem I have with the > option global vars is, that every variable is global. I'd like to have > some specific variables as global variables. > > Is there already a solution for that problem? If not, what do you > think about this as a new feature for the next version of > HTML-Template? > > Greets |
From: Steffen Z. <sze...@tf...> - 2003-07-29 23:26:14
|
Iterating over my loop structure is exactly what I'm doing to provide my variables as global. But for loop structures which have more than only one dimension this is not such a nice way to do it. With the option global_vars => 1 the script needs 6 seconds or more. With iterating over my loop structure, it needs only 1 second. I thought of a new function like global_param() which mainly act like param(). What do you think, Sam? greets At 09:38 29.07.2003 +1000, you wrote: >Sounds like a mighty fine feature to me. Something i can see myself >using quite a bit.... > >I have a few scenarios myself where i want one or two particular >variables to be global, but not the rest, currently, i iterate over my >loop structure and insert the global variable into every "row". The >above feature would take away the need for this. > >What think ye Sam? > >How would something like this suit, if global_vars is set to an arrayref >containing strings of variables that should be global, then only those >variables are global? > > > >On Tue, 2003-07-29 at 07:13, Steffen Zeidler wrote: > > Hi there, > > > > what I'm looking for are global vars. I know, that there is an > > options. But if your templates becoming really big, with many > > vars, the parsing isn't pretty fast. The problem I have with the > > option global vars is, that every variable is global. I'd like to have > > some specific variables as global variables. > > > > Is there already a solution for that problem? If not, what do you > > think about this as a new feature for the next version of > > HTML-Template? > > > > Greets |
From: Sam T. <sa...@tr...> - 2003-07-30 01:53:31
|
On 30 Jul 2003, Steffen Zeidler wrote: > Iterating over my loop structure is exactly what I'm doing to provide my > variables as global. But for loop structures which have more than only one > dimension this is not such a nice way to do it. With the option global_vars > => 1 the script needs 6 seconds or more. With iterating over my loop > structure, it needs only 1 second. 6 seconds! How big is this template? > I thought of a new function like global_param() which mainly act like > param(). What do you think, Sam? I'm not in favor, mainly because I think the global_vars option itself was a mistake. I think the global_vars behavior - where loops inherit variables from their enclosing scope - should have been the default behavior all along. In fact, someday I'd like to write a new version of HTML::Template where global_vars is always on and much more efficient. -sam |
From: Bob H. <bob...@ad...> - 2003-07-30 02:10:20
|
> -----Original Message----- > From: htm...@li... > [mailto:htm...@li...] On > Behalf Of Sam Tregar > Sent: Tuesday, July 29, 2003 9:54 PM > To: Steffen Zeidler > Cc: simran; HTML::Template > Subject: Re: [htmltmpl] Global Vars - not for all variables > I'm not in favor, mainly because I think the global_vars > option itself was a mistake. I think the global_vars > behavior - where loops inherit variables from their enclosing > scope - should have been the default behavior all along. In > fact, someday I'd like to write a new version of > HTML::Template where global_vars is always on and much more efficient. > > -sam > Is it "someday" yet? : ) Bob |
From: simran <sim...@re...> - 2003-07-30 02:12:30
|
On Wed, 2003-07-30 at 11:54, Sam Tregar wrote: > On 30 Jul 2003, Steffen Zeidler wrote: > > I thought of a new function like global_param() which mainly act like > > param(). What do you think, Sam? > > I'm not in favor, mainly because I think the global_vars option itself > was a mistake. I think the global_vars behavior - where loops inherit > variables from their enclosing scope - should have been the default > behavior all along. In fact, someday I'd like to write a new version > of HTML::Template where global_vars is always on and much more > efficient. > > -sam > I'm glad that is not currently the case though, as i have many a situation where i do things like: ------- my $template = new HTML::Template(...); $data = [ { first_name => "john", last_name => 'Smith' }, { first_name => "james", last_name => 'Paul' }, { first_name => "", last_name => 'Jones' }, ]; $template->param(first_name => "simran"); $template->param(users => $data); ------ Main User: <tmpl_var name=first_name> <tmpl_loop name=users> First Name: <tmpl_if name=first_name> <tmpl_var name=first_name> <tmpl_else> Unknown (last name is: <tmpl_var name=last_name>) </tmpl_if> </tmpl_loop> ------- If global vars was turned on, then the first_name variable in the loop would be inherited and would default to "simran" when unset!!! The above is a simple example i have just knocked up, but i have many many real world cases where things like this happen... and global_vars would really destroy me! simran. |
From: Sam T. <sa...@tr...> - 2003-07-30 02:14:46
|
On 30 Jul 2003, simran wrote: > If global vars was turned on, then the first_name variable in the > loop would be inherited and would default to "simran" when unset!!! Are you sure? I thought the way global_vars worked would only inherit the value if the variable wasn't set inside the loop at all. Setting it to "" explicitly should prevent it from being overridden. -sam |
From: simran <sim...@re...> - 2003-07-30 03:35:45
|
Right you are... what you mentioned is indeed the case... but looking back at my "real world application" examples... i have found data structures such as: my $data = [ { first_name => "john", last_name => 'Smith' }, { first_name => "james", last_name => 'Paul' }, { first_name => undef, last_name => 'Jones' }, ]; (Note: the undef as opposed to "") With the above data structure, global_vars does not produce the result "i expect" as i expect first_name to be blank/unset in the loop... On Wed, 2003-07-30 at 12:15, Sam Tregar wrote: > On 30 Jul 2003, simran wrote: > > > If global vars was turned on, then the first_name variable in the > > loop would be inherited and would default to "simran" when unset!!! > > Are you sure? I thought the way global_vars worked would only inherit > the value if the variable wasn't set inside the loop at all. Setting > it to "" explicitly should prevent it from being overridden. > > -sam |
From: Sam T. <sa...@tr...> - 2003-07-30 04:45:01
|
On 30 Jul 2003, simran wrote: > Right you are... what you mentioned is indeed the case... but looking > back at my "real world application" examples... i have found data > structures such as: > > my $data = [ > { first_name => "john", last_name => 'Smith' }, > { first_name => "james", last_name => 'Paul' }, > { first_name => undef, last_name => 'Jones' }, > ]; > > (Note: the undef as opposed to "") > > With the above data structure, global_vars does not produce the result > "i expect" as i expect first_name to be blank/unset in the loop... That's correct. Actually, it occurs to me that with just a few changes it should be possible to tell the difference between a parameter that was really never set and one that was set to undef. I think that would be necessary if global_vars=>0 went away. -sam |
From: simran <sim...@re...> - 2003-07-30 04:56:35
|
On Wed, 2003-07-30 at 14:45, Sam Tregar wrote: > On 30 Jul 2003, simran wrote: > > > Right you are... what you mentioned is indeed the case... but looking > > back at my "real world application" examples... i have found data > > structures such as: > > > > my $data = [ > > { first_name => "john", last_name => 'Smith' }, > > { first_name => "james", last_name => 'Paul' }, > > { first_name => undef, last_name => 'Jones' }, > > ]; > > > > (Note: the undef as opposed to "") > > > > With the above data structure, global_vars does not produce the result > > "i expect" as i expect first_name to be blank/unset in the loop... > > That's correct. Actually, it occurs to me that with just a few > changes it should be possible to tell the difference between a > parameter that was really never set and one that was set to undef. I > think that would be necessary if global_vars=>0 went away. > > -sam Do you think that it should be implemented as a "bug fix" in the current version anyway? That is, should HTM::Template now in a loop set even values of "undef" to "unset" rather than inherit from global if global_vars is on. simran. |