diff options
Diffstat (limited to 'libs/plugins/function.html_options.php')
| -rw-r--r-- | libs/plugins/function.html_options.php | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/libs/plugins/function.html_options.php b/libs/plugins/function.html_options.php index 7ac03902..269601a5 100644 --- a/libs/plugins/function.html_options.php +++ b/libs/plugins/function.html_options.php @@ -12,19 +12,24 @@ * Type: function<br> * Name: html_options<br> * Purpose: Prints the list of <option> tags generated from - * the passed parameters + * the passed parameters<br> + * Params: + * <pre> + * - name (optional) - string default "select" + * - values (required) - if no options supplied) - array + * - options (required) - if no values supplied) - associative array + * - selected (optional) - string default not set + * - output (required) - if not options supplied) - array + * - id (optional) - string default not set + * - class (optional) - string default not set + * </pre> * - * @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image} + * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} * (Smarty online manual) * @author Monte Ohrt <monte at ohrt dot com> - * @param array $params parameters - * Input:<br> - * - name (optional) - string default "select" - * - values (required if no options supplied) - array - * - options (required if no values supplied) - associative array - * - selected (optional) - string default not set - * - output (required if not options supplied) - array - * @param object $template template object + * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> + * @param array $params parameters + * @param Smarty_Internal_Template $template template object * @return string * @uses smarty_function_escape_special_chars() */ @@ -35,15 +40,14 @@ function smarty_function_html_options($params, $template) $name = null; $values = null; $options = null; - $selected = array(); + $selected = null; $output = null; $id = null; $class = null; $extra = ''; - $options_extra = ''; - foreach($params as $_key => $_val) { + foreach ($params as $_key => $_val) { switch ($_key) { case 'name': case 'class': @@ -52,7 +56,7 @@ function smarty_function_html_options($params, $template) break; case 'options': - $$_key = (array)$_val; + $options = (array)$_val; break; case 'values': @@ -61,7 +65,11 @@ function smarty_function_html_options($params, $template) break; case 'selected': - $$_key = array_map('strval', array_values((array)$_val)); + if (is_array($_val)) { + $selected = array_map('strval', array_values((array)$_val)); + } else { + $selected = $_val; + } break; default: @@ -72,7 +80,7 @@ function smarty_function_html_options($params, $template) } break; } - } + } if (!isset($options) && !isset($values)) return ''; @@ -83,14 +91,14 @@ function smarty_function_html_options($params, $template) if (isset($options)) { foreach ($options as $_key => $_val) { - $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); + $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); } } else { foreach ($values as $_i => $_key) { $_val = isset($output[$_i]) ? $output[$_i] : ''; $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); } - } + } if (!empty($name)) { $_html_class = !empty($class) ? ' class="'.$class.'"' : ''; @@ -99,22 +107,26 @@ function smarty_function_html_options($params, $template) } return $_html_result; -} +} function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx) { if (!is_array($value)) { - $_html_result = '<option value="' . - smarty_function_escape_special_chars($key) . '"'; - if (in_array((string)$key, $selected)) + $_html_result = '<option value="' . smarty_function_escape_special_chars($key) . '"'; + if (is_array($selected)) { + if (in_array((string)$key, $selected)) { + $_html_result .= ' selected="selected"'; + } + } elseif ($key == $selected) { $_html_result .= ' selected="selected"'; + } $_html_class = !empty($class) ? ' class="'.$class.' option"' : ''; $_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : ''; $_html_result .= $_html_class . $_html_id . '>' . smarty_function_escape_special_chars($value) . '</option>' . "\n"; $idx++; } else { $_idx = 0; - $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, $id.'-'.$idx, $class, $_idx); + $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx); $idx++; } return $_html_result; |
