|
1 <?php |
|
2 /** |
|
3 * Smarty plugin |
|
4 * |
|
5 * @package Smarty |
|
6 * @subpackage PluginsFunction |
|
7 */ |
|
8 |
|
9 /** |
|
10 * Smarty {html_radios} function plugin |
|
11 * |
|
12 * File: function.html_radios.php<br> |
|
13 * Type: function<br> |
|
14 * Name: html_radios<br> |
|
15 * Date: 24.Feb.2003<br> |
|
16 * Purpose: Prints out a list of radio input types<br> |
|
17 * Params: |
|
18 * <pre> |
|
19 * - name (optional) - string default "radio" |
|
20 * - values (required) - array |
|
21 * - options (required) - associative array |
|
22 * - checked (optional) - array default not set |
|
23 * - separator (optional) - ie <br> or |
|
24 * - output (optional) - the output next to each radio button |
|
25 * - assign (optional) - assign the output as an array to this variable |
|
26 * - escape (optional) - escape the content (not value), defaults to true |
|
27 * </pre> |
|
28 * Examples: |
|
29 * <pre> |
|
30 * {html_radios values=$ids output=$names} |
|
31 * {html_radios values=$ids name='box' separator='<br>' output=$names} |
|
32 * {html_radios values=$ids checked=$checked separator='<br>' output=$names} |
|
33 * </pre> |
|
34 * |
|
35 * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} |
|
36 * (Smarty online manual) |
|
37 * @author Christopher Kvarme <christopher.kvarme@flashjab.com> |
|
38 * @author credits to Monte Ohrt <monte at ohrt dot com> |
|
39 * @version 1.0 |
|
40 * @param array $params parameters |
|
41 * @param Smarty_Internal_Template $template template object |
|
42 * @return string |
|
43 * @uses smarty_function_escape_special_chars() |
|
44 */ |
|
45 function smarty_function_html_radios($params, $template) |
|
46 { |
|
47 require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); |
|
48 |
|
49 $name = 'radio'; |
|
50 $values = null; |
|
51 $options = null; |
|
52 $selected = null; |
|
53 $separator = ''; |
|
54 $escape = true; |
|
55 $labels = true; |
|
56 $label_ids = false; |
|
57 $output = null; |
|
58 $extra = ''; |
|
59 |
|
60 foreach($params as $_key => $_val) { |
|
61 switch ($_key) { |
|
62 case 'name': |
|
63 case 'separator': |
|
64 $$_key = (string) $_val; |
|
65 break; |
|
66 |
|
67 case 'checked': |
|
68 case 'selected': |
|
69 if (is_array($_val)) { |
|
70 trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); |
|
71 } elseif (is_object($_val)) { |
|
72 if (method_exists($_val, "__toString")) { |
|
73 $selected = smarty_function_escape_special_chars((string) $_val->__toString()); |
|
74 } else { |
|
75 trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); |
|
76 } |
|
77 } else { |
|
78 $selected = (string) $_val; |
|
79 } |
|
80 break; |
|
81 |
|
82 case 'escape': |
|
83 case 'labels': |
|
84 case 'label_ids': |
|
85 $$_key = (bool) $_val; |
|
86 break; |
|
87 |
|
88 case 'options': |
|
89 $$_key = (array) $_val; |
|
90 break; |
|
91 |
|
92 case 'values': |
|
93 case 'output': |
|
94 $$_key = array_values((array) $_val); |
|
95 break; |
|
96 |
|
97 case 'radios': |
|
98 trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); |
|
99 $options = (array) $_val; |
|
100 break; |
|
101 |
|
102 case 'assign': |
|
103 break; |
|
104 |
|
105 default: |
|
106 if (!is_array($_val)) { |
|
107 $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; |
|
108 } else { |
|
109 trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); |
|
110 } |
|
111 break; |
|
112 } |
|
113 } |
|
114 |
|
115 if (!isset($options) && !isset($values)) { |
|
116 /* raise error here? */ |
|
117 return ''; |
|
118 } |
|
119 |
|
120 $_html_result = array(); |
|
121 |
|
122 if (isset($options)) { |
|
123 foreach ($options as $_key => $_val) { |
|
124 $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); |
|
125 } |
|
126 } else { |
|
127 foreach ($values as $_i => $_key) { |
|
128 $_val = isset($output[$_i]) ? $output[$_i] : ''; |
|
129 $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); |
|
130 } |
|
131 } |
|
132 |
|
133 if (!empty($params['assign'])) { |
|
134 $template->assign($params['assign'], $_html_result); |
|
135 } else { |
|
136 return implode("\n", $_html_result); |
|
137 } |
|
138 } |
|
139 |
|
140 function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape) |
|
141 { |
|
142 $_output = ''; |
|
143 |
|
144 if (is_object($value)) { |
|
145 if (method_exists($value, "__toString")) { |
|
146 $value = (string) $value->__toString(); |
|
147 } else { |
|
148 trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); |
|
149 return ''; |
|
150 } |
|
151 } else { |
|
152 $value = (string) $value; |
|
153 } |
|
154 |
|
155 if (is_object($output)) { |
|
156 if (method_exists($output, "__toString")) { |
|
157 $output = (string) $output->__toString(); |
|
158 } else { |
|
159 trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); |
|
160 return ''; |
|
161 } |
|
162 } else { |
|
163 $output = (string) $output; |
|
164 } |
|
165 |
|
166 if ($labels) { |
|
167 if ($label_ids) { |
|
168 $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); |
|
169 $_output .= '<label for="' . $_id . '">'; |
|
170 } else { |
|
171 $_output .= '<label>'; |
|
172 } |
|
173 } |
|
174 |
|
175 $name = smarty_function_escape_special_chars($name); |
|
176 $value = smarty_function_escape_special_chars($value); |
|
177 if ($escape) { |
|
178 $output = smarty_function_escape_special_chars($output); |
|
179 } |
|
180 |
|
181 $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"'; |
|
182 |
|
183 if ($labels && $label_ids) { |
|
184 $_output .= ' id="' . $_id . '"'; |
|
185 } |
|
186 |
|
187 if ($value === $selected) { |
|
188 $_output .= ' checked="checked"'; |
|
189 } |
|
190 |
|
191 $_output .= $extra . ' />' . $output; |
|
192 if ($labels) { |
|
193 $_output .= '</label>'; |
|
194 } |
|
195 |
|
196 $_output .= $separator; |
|
197 return $_output; |
|
198 } |
|
199 |
|
200 ?> |