Re: html_options
Danilo Buerger <[email protected]> Mon, 26 Feb 2007 13:44:58 +0100
| Newsgroups | gmane.comp.php.smarty.devel |
|---|---|
| Message-ID | <[email protected]> |
messju mohr schrieb:
> Hi,
>
> what about multiple selected values, then?
Good point, but that raises another bug. When using multiple selected
values, the <select> tag should have a multiple="multiple" attribute. Of
course this could be applied by a feature where every attribute in the
{html_options} that isnt one of values/output/selected/options/name is
appended to the <select> tag (if present). So i guess the approach
should be if name is specified and multiple select values exist
multiple="multiple" should be automatically applied to the <select> tag
(if present). Here is a patch for this, which also fixes the first issue
but keeps the selected attribute as array:
Index: plugins/function.html_options.php
===================================================================
RCS file: /repository/smarty/libs/plugins/function.html_options.php,v
retrieving revision 1.25
diff -r1.25 function.html_options.php
58c58
< $$_key = array_map('strval', array_values((array)$_val));
---
> $$_key = array_values((array)$_val);
90a91,93
> if (count($selected) > 1) {
> $extra = ' multiple="multiple"' . $extra;
> }
The documentation of html_options contains a bug as well:
Example 8-15 assigns "lookups" and "fav" but the template uses
"myOptions" and "mySelect". The template defines the name of the select
as "foo" but the output has "breakTime" as selects name.
>
> IMHO this is not a bug in html_options(), it's an incostistency in
> php's type system. php does not support boolean values as array keys,
> so don't use them as such.
From http://de2.php.net/manual/en/language.types.array.php:
"Using TRUE as a key will evaluate to integer 1 as key. Using FALSE as
a key will evaluate to integer 0 as key."
This clearly allows the use of boolean values as array keys.
>
> On Sat, Feb 24, 2007 at 07:39:05PM +0100, Danilo Buerger wrote:
>> Hey list,
>>
>> User Sweetums recently asked on the IRC channel about a weird problem in
>> html_options. See this code snipet:
>>
>> --- template ---
>> {html_options name=foo options=$myOptions selected=$mySelect}
>>
>> --- .php ---
>> $smarty->assign('myOptions', array(true => 'test', false => 'foo'));
>> $smarty->assign('mySelect', false);
>> $smarty->display('test.tpl');
>>
>> This will not select foo as default option because the boolean in select
>> is casted to a string (resulting in an empty string) but in options the
>> boolean is casted to an int (resulting in 0). This patch should fix it up:
>>
>> Index: plugins/function.html_options.php
>> ===================================================================
>> RCS file: /repository/smarty/libs/plugins/function.html_options.php,v
>> retrieving revision 1.25
>> diff -r1.25 function.html_options.php
>> 58c58
>> < $$_key = array_map('strval', array_values((array)$_val));
>> ---
>>> $$_key = $_val;
>> 102c102
>> < if (in_array((string)$key, $selected))
>> ---
>>> if ((string)$key == $selected)
>> --
>> Smarty Development Mailing List (http://smarty.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php