[ Index ] |
|
Code source de LifeType 1.2.4 |
1 <?php 2 /** 3 * Smarty plugin 4 * @package Smarty 5 * @subpackage plugins 6 */ 7 8 /** 9 * Smarty {html_select_date} plugin 10 * 11 * Type: function<br> 12 * Name: html_select_date<br> 13 * Purpose: Prints the dropdowns for date selection. 14 * 15 * ChangeLog:<br> 16 * - 1.0 initial release 17 * - 1.1 added support for +/- N syntax for begin 18 * and end year values. (Monte) 19 * - 1.2 added support for yyyy-mm-dd syntax for 20 * time value. (Jan Rosier) 21 * - 1.3 added support for choosing format for 22 * month values (Gary Loescher) 23 * - 1.3.1 added support for choosing format for 24 * day values (Marcus Bointon) 25 * - 1.3.2 support negative timestamps, force year 26 * dropdown to include given date unless explicitly set (Monte) 27 * - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that 28 * of 0000-00-00 dates (cybot, boots) 29 * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date} 30 * (Smarty online manual) 31 * @version 1.3.4 32 * @author Andrei Zmievski 33 * @author Monte Ohrt <monte at ohrt dot com> 34 * @param array 35 * @param Smarty 36 * @return string 37 */ 38 function smarty_function_html_select_date($params, &$smarty) 39 { 40 require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); 41 require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); 42 require_once $smarty->_get_plugin_filepath('function','html_options'); 43 /* Default values. */ 44 $prefix = "Date_"; 45 $start_year = strftime("%Y"); 46 $end_year = $start_year; 47 $display_days = true; 48 $display_months = true; 49 $display_years = true; 50 $month_format = "%B"; 51 /* Write months as numbers by default GL */ 52 $month_value_format = "%m"; 53 $day_format = "%02d"; 54 /* Write day values using this format MB */ 55 $day_value_format = "%d"; 56 $year_as_text = false; 57 /* Display years in reverse order? Ie. 2000,1999,.... */ 58 $reverse_years = false; 59 /* Should the select boxes be part of an array when returned from PHP? 60 e.g. setting it to "birthday", would create "birthday[Day]", 61 "birthday[Month]" & "birthday[Year]". Can be combined with prefix */ 62 $field_array = null; 63 /* <select size>'s of the different <select> tags. 64 If not set, uses default dropdown. */ 65 $day_size = null; 66 $month_size = null; 67 $year_size = null; 68 /* Unparsed attributes common to *ALL* the <select>/<input> tags. 69 An example might be in the template: all_extra ='class ="foo"'. */ 70 $all_extra = null; 71 /* Separate attributes for the tags. */ 72 $day_extra = null; 73 $month_extra = null; 74 $year_extra = null; 75 /* Order in which to display the fields. 76 "D" -> day, "M" -> month, "Y" -> year. */ 77 $field_order = 'MDY'; 78 /* String printed between the different fields. */ 79 $field_separator = "\n"; 80 $time = time(); 81 $all_empty = null; 82 $day_empty = null; 83 $month_empty = null; 84 $year_empty = null; 85 $extra_attrs = ''; 86 87 foreach ($params as $_key=>$_value) { 88 switch ($_key) { 89 case 'prefix': 90 case 'time': 91 case 'start_year': 92 case 'end_year': 93 case 'month_format': 94 case 'day_format': 95 case 'day_value_format': 96 case 'field_array': 97 case 'day_size': 98 case 'month_size': 99 case 'year_size': 100 case 'all_extra': 101 case 'day_extra': 102 case 'month_extra': 103 case 'year_extra': 104 case 'field_order': 105 case 'field_separator': 106 case 'month_value_format': 107 case 'month_empty': 108 case 'day_empty': 109 case 'year_empty': 110 $$_key = (string)$_value; 111 break; 112 113 case 'all_empty': 114 $$_key = (string)$_value; 115 $day_empty = $month_empty = $year_empty = $all_empty; 116 break; 117 118 case 'display_days': 119 case 'display_months': 120 case 'display_years': 121 case 'year_as_text': 122 case 'reverse_years': 123 $$_key = (bool)$_value; 124 break; 125 126 default: 127 if(!is_array($_value)) { 128 $extra_attrs .= ' '.$_key.'="'.smarty_function_escape_special_chars($_value).'"'; 129 } else { 130 $smarty->trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); 131 } 132 break; 133 } 134 } 135 136 if (preg_match('!^-\d+$!', $time)) { 137 // negative timestamp, use date() 138 $time = date('Y-m-d', $time); 139 } 140 // If $time is not in format yyyy-mm-dd 141 if (preg_match('/^(\d{0,4}-\d{0,2}-\d{0,2})/', $time, $found)) { 142 $time = $found[1]; 143 } else { 144 // use smarty_make_timestamp to get an unix timestamp and 145 // strftime to make yyyy-mm-dd 146 $time = strftime('%Y-%m-%d', smarty_make_timestamp($time)); 147 } 148 // Now split this in pieces, which later can be used to set the select 149 $time = explode("-", $time); 150 151 // make syntax "+N" or "-N" work with start_year and end_year 152 if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) { 153 if ($match[1] == '+') { 154 $end_year = strftime('%Y') + $match[2]; 155 } else { 156 $end_year = strftime('%Y') - $match[2]; 157 } 158 } 159 if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) { 160 if ($match[1] == '+') { 161 $start_year = strftime('%Y') + $match[2]; 162 } else { 163 $start_year = strftime('%Y') - $match[2]; 164 } 165 } 166 if (strlen($time[0]) > 0) { 167 if ($start_year > $time[0] && !isset($params['start_year'])) { 168 // force start year to include given date if not explicitly set 169 $start_year = $time[0]; 170 } 171 if($end_year < $time[0] && !isset($params['end_year'])) { 172 // force end year to include given date if not explicitly set 173 $end_year = $time[0]; 174 } 175 } 176 177 $field_order = strtoupper($field_order); 178 179 $html_result = $month_result = $day_result = $year_result = ""; 180 181 $field_separator_count = -1; 182 if ($display_months) { 183 $field_separator_count++; 184 $month_names = array(); 185 $month_values = array(); 186 if(isset($month_empty)) { 187 $month_names[''] = $month_empty; 188 $month_values[''] = ''; 189 } 190 for ($i = 1; $i <= 12; $i++) { 191 $month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000)); 192 $month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000)); 193 } 194 195 $month_result .= '<select name='; 196 if (null !== $field_array){ 197 $month_result .= '"' . $field_array . '[' . $prefix . 'Month]"'; 198 } else { 199 $month_result .= '"' . $prefix . 'Month"'; 200 } 201 if (null !== $month_size){ 202 $month_result .= ' size="' . $month_size . '"'; 203 } 204 if (null !== $month_extra){ 205 $month_result .= ' ' . $month_extra; 206 } 207 if (null !== $all_extra){ 208 $month_result .= ' ' . $all_extra; 209 } 210 $month_result .= $extra_attrs . '>'."\n"; 211 212 $month_result .= smarty_function_html_options(array('output' => $month_names, 213 'values' => $month_values, 214 'selected' => (int)$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '', 215 'print_result' => false), 216 $smarty); 217 $month_result .= '</select>'; 218 } 219 220 if ($display_days) { 221 $field_separator_count++; 222 $days = array(); 223 if (isset($day_empty)) { 224 $days[''] = $day_empty; 225 $day_values[''] = ''; 226 } 227 for ($i = 1; $i <= 31; $i++) { 228 $days[] = sprintf($day_format, $i); 229 $day_values[] = sprintf($day_value_format, $i); 230 } 231 232 $day_result .= '<select name='; 233 if (null !== $field_array){ 234 $day_result .= '"' . $field_array . '[' . $prefix . 'Day]"'; 235 } else { 236 $day_result .= '"' . $prefix . 'Day"'; 237 } 238 if (null !== $day_size){ 239 $day_result .= ' size="' . $day_size . '"'; 240 } 241 if (null !== $all_extra){ 242 $day_result .= ' ' . $all_extra; 243 } 244 if (null !== $day_extra){ 245 $day_result .= ' ' . $day_extra; 246 } 247 $day_result .= $extra_attrs . '>'."\n"; 248 $day_result .= smarty_function_html_options(array('output' => $days, 249 'values' => $day_values, 250 'selected' => $time[2], 251 'print_result' => false), 252 $smarty); 253 $day_result .= '</select>'; 254 } 255 256 if ($display_years) { 257 $field_separator_count++; 258 if (null !== $field_array){ 259 $year_name = $field_array . '[' . $prefix . 'Year]'; 260 } else { 261 $year_name = $prefix . 'Year'; 262 } 263 if ($year_as_text) { 264 $year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"'; 265 if (null !== $all_extra){ 266 $year_result .= ' ' . $all_extra; 267 } 268 if (null !== $year_extra){ 269 $year_result .= ' ' . $year_extra; 270 } 271 $year_result .= ' />'; 272 } else { 273 $years = range((int)$start_year, (int)$end_year); 274 if ($reverse_years) { 275 rsort($years, SORT_NUMERIC); 276 } else { 277 sort($years, SORT_NUMERIC); 278 } 279 $yearvals = $years; 280 if(isset($year_empty)) { 281 array_unshift($years, $year_empty); 282 array_unshift($yearvals, ''); 283 } 284 $year_result .= '<select name="' . $year_name . '"'; 285 if (null !== $year_size){ 286 $year_result .= ' size="' . $year_size . '"'; 287 } 288 if (null !== $all_extra){ 289 $year_result .= ' ' . $all_extra; 290 } 291 if (null !== $year_extra){ 292 $year_result .= ' ' . $year_extra; 293 } 294 $year_result .= $extra_attrs . '>'."\n"; 295 $year_result .= smarty_function_html_options(array('output' => $years, 296 'values' => $yearvals, 297 'selected' => $time[0], 298 'print_result' => false), 299 $smarty); 300 $year_result .= '</select>'; 301 } 302 } 303 304 // Loop thru the field_order field 305 for ($i = 0; $i <= 2; $i++){ 306 $c = substr($field_order, $i, 1); 307 switch ($c){ 308 case 'D': 309 $html_result .= $day_result; 310 break; 311 312 case 'M': 313 $html_result .= $month_result; 314 break; 315 316 case 'Y': 317 $html_result .= $year_result; 318 break; 319 } 320 // Add the field seperator 321 if($i < $field_separator_count) { 322 $html_result .= $field_separator; 323 } 324 } 325 326 return $html_result; 327 } 328 329 /* vim: set expandtab: */ 330 331 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 21:04:15 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |