public static Datelist::processDatelist(&$element, FormStateInterface $form_state, &$complete_form)
Expands a date element into an array of individual elements.
Required settings:
Optional properties include:
Example usage:
$form = array( '#type' => 'datelist', '#default_value' => new DrupalDateTime('2000-01-01 00:00:00'), '#date_part_order' => array('month', 'day', 'year', 'hour', 'minute', 'ampm'), '#date_text_parts' => array('year'), '#date_year_range' => '2010:2020', '#date_increment' => 15, );
array $element: The form element whose value is being processed.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
array $complete_form: The complete form structure.
array
public static function processDatelist(&$element, FormStateInterface $form_state, &$complete_form) { // Load translated date part labels from the appropriate calendar plugin. $date_helper = new DateHelper(); // The value callback has populated the #value array. $date = !empty($element['#value']['object']) ? $element['#value']['object'] : NULL; // Set a fallback timezone. if ($date instanceof DrupalDateTime) { $element['#date_timezone'] = $date->getTimezone()->getName(); } elseif (!empty($element['#timezone'])) { $element['#date_timezone'] = $element['#date_timezone']; } else { $element['#date_timezone'] = drupal_get_user_timezone(); } $element['#tree'] = TRUE; // Determine the order of the date elements. $order = !empty($element['#date_part_order']) ? $element['#date_part_order'] : array('year', 'month', 'day'); $text_parts = !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : array(); // Output multi-selector for date. foreach ($order as $part) { switch ($part) { case 'day': $options = $date_helper->days($element['#required']); $format = 'j'; $title = t('Day'); break; case 'month': $options = $date_helper->monthNamesAbbr($element['#required']); $format = 'n'; $title = t('Month'); break; case 'year': $range = static::datetimeRangeYears($element['#date_year_range'], $date); $options = $date_helper->years($range[0], $range[1], $element['#required']); $format = 'Y'; $title = t('Year'); break; case 'hour': $format = in_array('ampm', $element['#date_part_order']) ? 'g' : 'G'; $options = $date_helper->hours($format, $element['#required']); $title = t('Hour'); break; case 'minute': $format = 'i'; $options = $date_helper->minutes($format, $element['#required'], $element['#date_increment']); $title = t('Minute'); break; case 'second': $format = 's'; $options = $date_helper->seconds($format, $element['#required'], $element['#date_increment']); $title = t('Second'); break; case 'ampm': $format = 'a'; $options = $date_helper->ampm($element['#required']); $title = t('AM/PM'); break; default: $format = ''; $options = array(); $title = ''; } $default = isset($element['#value'][$part]) && trim($element['#value'][$part]) != '' ? $element['#value'][$part] : ''; $value = $date instanceof DrupalDateTime && !$date->hasErrors() ? $date->format($format) : $default; if (!empty($value) && $part != 'ampm') { $value = intval($value); } $element['#attributes']['title'] = $title; $element[$part] = array( '#type' => in_array($part, $text_parts) ? 'textfield' : 'select', '#title' => $title, '#title_display' => 'invisible', '#value' => $value, '#attributes' => $element['#attributes'], '#options' => $options, '#required' => $element['#required'], '#error_no_message' => FALSE, '#empty_option' => $title, ); } // Allows custom callbacks to alter the element. if (!empty($element['#date_date_callbacks'])) { foreach ($element['#date_date_callbacks'] as $callback) { if (function_exists($callback)) { $callback($element, $form_state, $date); } } } return $element; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Datetime!Element!Datelist.php/function/Datelist::processDatelist/8.1.x