Re: [SMARTY] default modifiers vs. foreach & if

View: New views
3 Messages — Rating Filter:   Alert me  

Parent Message unknown Re: [SMARTY] default modifiers vs. foreach & if

by Danilo Buerger-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hey.

I am not able to reproduce this. Could you please submit a working
sample? And yes, this should go to the dev list if you think its a bug.

Bye.

Artemy Tregoubenko schrieb:

> Hello everyone.
>
> I just tried to use this nice feature of smarty:
> http://smarty.php.net/manual/en/variable.default.modifiers.php
> I think that auto-escaping of all values when outputting them is a great
> idea, so i set $this->default_modifiers = array('escape:"html"');
>
> It worked nice until I tried to use foreach to iterate over array of
> arrays. I got lots of messages like this:
> Warning: htmlspecialchars() expects parameter 1 to be string, array
> given...
>
> The same warnings were displayed when using "{if $array}".
>
> I looked into compiled templates and found that smarty applies default
> modifiers to all parameters of foreach, including
> "from=$array_of_arrays", and this generates warning.
>
> Hiding warnings is a bad practice, so I'm looking for another solution
> for this problem. By now I hacked _compile_foreach_start and
> _compile_if_tag so that default_modifiers are toggled off in the
> beginning and restored at the end of methods. I understand this is only
> partial solution.
>
> Can anyone, having deeper knowledge of smarty compiler, suggest better
> way to fix this?
> Or should I write about my problem to dev list?
>

--
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [SMARTY] default modifiers vs. foreach & if

by boots-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi.

Actually, this is an expected behavior -- even though it does make
default_modifiers that much less useful. If you don't want default_modifier
behavior to be applied to a specific template variable access, you need to say
so in the template eg: {$foo|smarty:nodefaults}. This is especially important
for non-scalar values (and specifically, for non-string values) such as arrays
that you would rather like to loop through.

You might also search the forums for "nodefaults" to see a few discussions (and
perhaps even a few solutions/workarounds) on this topic. There was a long
discussion about adding a new auto-escaping feature that would only be applied
to scalar values, but unfortunately, that didn't get as far as it might have.

boots

--- Danilo Buerger <danilo@...> wrote:

> Hey.
>
> I am not able to reproduce this. Could you please submit a working
> sample? And yes, this should go to the dev list if you think its a bug.
>
> Bye.
>
> Artemy Tregoubenko schrieb:
> > Hello everyone.
> >
> > I just tried to use this nice feature of smarty:
> > http://smarty.php.net/manual/en/variable.default.modifiers.php
> > I think that auto-escaping of all values when outputting them is a great
> > idea, so i set $this->default_modifiers = array('escape:"html"');
> >
> > It worked nice until I tried to use foreach to iterate over array of
> > arrays. I got lots of messages like this:
> > Warning: htmlspecialchars() expects parameter 1 to be string, array
> > given...
> >
> > The same warnings were displayed when using "{if $array}".
> >
> > I looked into compiled templates and found that smarty applies default
> > modifiers to all parameters of foreach, including
> > "from=$array_of_arrays", and this generates warning.
> >
> > Hiding warnings is a bad practice, so I'm looking for another solution
> > for this problem. By now I hacked _compile_foreach_start and
> > _compile_if_tag so that default_modifiers are toggled off in the
> > beginning and restored at the end of methods. I understand this is only
> > partial solution.
> >
> > Can anyone, having deeper knowledge of smarty compiler, suggest better
> > way to fix this?
> > Or should I write about my problem to dev list?
>



       
____________________________________________________________________________________Give spam the boot. Take control with tough spam protection in the all-new Yahoo! Mail Beta.
http://advision.webevents.yahoo.com/mailbeta/newmail_html.html 

--
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [SMARTY] default modifiers vs. foreach & if

by arty-5 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks, boots!

I've found your discussion of this topic with andreas and messju. I wish  
what andreas suggests could be done easily. For now I'll stick to my quick  
hacks in compiler and patch for escape modifier which ignores all  
non-scalars.

> Hi.
>
> Actually, this is an expected behavior -- even though it does make
> default_modifiers that much less useful. If you don't want  
> default_modifier
> behavior to be applied to a specific template variable access, you need  
> to say
> so in the template eg: {$foo|smarty:nodefaults}. This is especially  
> important
> for non-scalar values (and specifically, for non-string values) such as  
> arrays
> that you would rather like to loop through.
>
> You might also search the forums for "nodefaults" to see a few  
> discussions (and
> perhaps even a few solutions/workarounds) on this topic. There was a long
> discussion about adding a new auto-escaping feature that would only be  
> applied
> to scalar values, but unfortunately, that didn't get as far as it might  
> have.
>
> boots
>
> --- Danilo Buerger <danilo@...> wrote:
>
>> Hey.
>>
>> I am not able to reproduce this. Could you please submit a working
>> sample? And yes, this should go to the dev list if you think its a bug.
>>
>> Bye.
>>
>> Artemy Tregoubenko schrieb:
>> > Hello everyone.
>> >
>> > I just tried to use this nice feature of smarty:
>> > http://smarty.php.net/manual/en/variable.default.modifiers.php
>> > I think that auto-escaping of all values when outputting them is a  
>> great
>> > idea, so i set $this->default_modifiers = array('escape:"html"');
>> >
>> > It worked nice until I tried to use foreach to iterate over array of
>> > arrays. I got lots of messages like this:
>> > Warning: htmlspecialchars() expects parameter 1 to be string, array
>> > given...
>> >
>> > The same warnings were displayed when using "{if $array}".
>> >
>> > I looked into compiled templates and found that smarty applies default
>> > modifiers to all parameters of foreach, including
>> > "from=$array_of_arrays", and this generates warning.
>> >
>> > Hiding warnings is a bad practice, so I'm looking for another solution
>> > for this problem. By now I hacked _compile_foreach_start and
>> > _compile_if_tag so that default_modifiers are toggled off in the
>> > beginning and restored at the end of methods. I understand this is  
>> only
>> > partial solution.
>> >
>> > Can anyone, having deeper knowledge of smarty compiler, suggest better
>> > way to fix this?
>> > Or should I write about my problem to dev list?
>>
>
>
>
> ____________________________________________________________________________________Give  
> spam the boot. Take control with tough spam protection in the all-new  
> Yahoo! Mail Beta.
> http://advision.webevents.yahoo.com/mailbeta/newmail_html.html



--
Sincerely yours, Arty
[ (i): http://arty.name ]

--
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

LightInTheBox - Buy quality products at wholesale price!