public static Datetime::processDatetime(&$element, FormStateInterface $form_state, &$complete_form)
Expands a datetime element type into date and/or time elements.
All form elements are designed to have sane defaults so any or all can be omitted. Both the date and time components are configurable so they can be output as HTML5 datetime elements or not, as desired.
Examples of possible configurations include: HTML5 date and time: #date_date_element = 'date'; #date_time_element = 'time'; HTML5 datetime: #date_date_element = 'datetime'; #date_time_element = 'none'; HTML5 time only: #date_date_element = 'none'; #date_time_element = 'time' Non-HTML5: #date_date_element = 'text'; #date_time_element = 'text';
Required settings:
Optional properties include:
Example usage:
$form = array( '#type' => 'datetime', '#default_value' => new DrupalDateTime('2000-01-01 00:00:00'), '#date_date_element' => 'date', '#date_time_element' => 'none', '#date_year_range' => '2010:+3', );
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 The form element whose value has been processed.
public static function processDatetime(&$element, FormStateInterface $form_state, &$complete_form) { $format_settings = array(); // 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'] = drupal_get_user_timezone(); } $element['#tree'] = TRUE; if ($element['#date_date_element'] != 'none') { $date_format = $element['#date_date_element'] != 'none' ? static::getHtml5DateFormat($element) : ''; $date_value = !empty($date) ? $date->format($date_format, $format_settings) : $element['#value']['date']; // Creating format examples on every individual date item is messy, and // placeholders are invalid for HTML5 date and datetime, so an example // format is appended to the title to appear in tooltips. $extra_attributes = array( 'title' => t('Date (e.g. @format)', array('@format' => static::formatExample($date_format))), 'type' => $element['#date_date_element'], ); // Adds the HTML5 date attributes. if ($date instanceof DrupalDateTime && !$date->hasErrors()) { $html5_min = clone($date); $range = static::datetimeRangeYears($element['#date_year_range'], $date); $html5_min->setDate($range[0], 1, 1)->setTime(0, 0, 0); $html5_max = clone($date); $html5_max->setDate($range[1], 12, 31)->setTime(23, 59, 59); $extra_attributes += array( 'min' => $html5_min->format($date_format, $format_settings), 'max' => $html5_max->format($date_format, $format_settings), ); } $element['date'] = array( '#type' => 'date', '#title' => t('Date'), '#title_display' => 'invisible', '#value' => $date_value, '#attributes' => $element['#attributes'] + $extra_attributes, '#required' => $element['#required'], '#size' => max(12, strlen($element['#value']['date'])), '#error_no_message' => TRUE, '#date_date_format' => $element['#date_date_format'], ); // 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); } } } } if ($element['#date_time_element'] != 'none') { $time_format = $element['#date_time_element'] != 'none' ? static::getHtml5TimeFormat($element) : ''; $time_value = !empty($date) ? $date->format($time_format, $format_settings) : $element['#value']['time']; // Adds the HTML5 attributes. $extra_attributes = array( 'title' => t('Time (e.g. @format)', array('@format' => static::formatExample($time_format))), 'type' => $element['#date_time_element'], 'step' => $element['#date_increment'], ); $element['time'] = array( '#type' => 'date', '#title' => t('Time'), '#title_display' => 'invisible', '#value' => $time_value, '#attributes' => $element['#attributes'] + $extra_attributes, '#required' => $element['#required'], '#size' => 12, '#error_no_message' => TRUE, ); // Allows custom callbacks to alter the element. if (!empty($element['#date_time_callbacks'])) { foreach ($element['#date_time_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!Datetime.php/function/Datetime::processDatetime/8.1.x