Могу ли я прикрепить виджет jquery.ui.datepicker к элементу формы, используя форму API?

7

У меня есть общий элемент формы:

$form['date'] = array(
    '#type' => 'textfield',
    '#title' => t( 'Date' ),
);

То, что я хочу добавить указатель даты jquery ui к этому элементу. Есть ли способ сделать это через форму API, или я должен добавить следующее, используя drupal_add_js:

$('#edit-date').datepicker();

Или есть другой, еще лучший способ?

meriial
источник

Ответы:

4

Вы можете использовать after_build в своей форме для вызова функции, содержащей drupal_add_js

цифровой
источник
Я никогда не использовал '#after_build' раньше, но это помогло. Для других людей, впервые знакомых с этим свойством API формы, он принимает массив имен функций, которые вызываются с $ element и $ form_state в качестве параметров. Удобно для добавления пользовательских JS для конкретного элемента. Я также изучил определение своего собственного элемента (а-ля Date), но решил, что это излишне.
meriial
Воспользовались вашими советами здесь, чтобы собрать вместе covenantdesign.com/blog/…
Джошуа Стюардсон
4

Гораздо проще решить эту проблему - установить всплывающие модули Date и Date и использовать следующий элемент api формы, чтобы мгновенно получить всплывающий элемент date. Никаких дополнительных JS в том числе не требуется.

$form['date'] = array(
  '#type' => 'date_popup',
  '#title' => t('Date'),
  '#date_format' => 'd/m/Y',
);

Атрибут #date_format принимает строку в формате PHP Date, которая используется в качестве формата ввода для поля даты.

мастер Шеф
источник
4

Проект Date содержит модуль (date_popup.module), который реализует элемент формы date_popup. Модуль date_popup.module для Drupal 6 определил функцию date_popup_load () , но эта функция отсутствует в версии для Drupal 7 модуля и не является базовой функцией Drupal.

Функция заключалась в том, чтобы включить необходимые файлы JavaScript.

  $path = drupal_get_path('module', 'date_popup');
  if (module_exists('jquery_ui')) {
    jquery_ui_add('ui.datepicker');
    global $language;
    if ($language->language != 'en') {
      jquery_ui_add("i18n/ui.datepicker-{$language->language}");
    }
  }
  if (variable_get('date_popup_timepicker', 'default') == 'default') {
    drupal_add_js($path . '/lib/jquery.timeentry.pack.js');
  }

Эквивалентная функция, присутствующая в версии модуля для Drupal 7, это date_popup_add () , которая содержит следующий код.

drupal_add_library('system', 'ui.datepicker');
drupal_add_library('date_popup', 'timeentry');

// Add the wvega-timepicker library if it's available.
$wvega_path = date_popup_get_wvega_path();
if ($wvega_path) {
  drupal_add_js($wvega_path . '/jquery.timepicker.js');
  drupal_add_css($wvega_path . '/jquery.timepicker.css');
} 

Эта функция вызывается из date_popup_element_process () , которая является функцией #process, используемой из поля формы date_popup. Вы можете написать функцию #process, содержащую код, подобный коду, выполняемому из этой функции, и прикрепить его к полю формы, в которое вы хотите добавить средство выбора даты.

киамлалуно
источник
Для моих целей это работало как шарм, который заключался в добавлении пользовательского указателя даты в веб-форму.
RevNoah