我可以使用表单api将jquery.ui.datepicker小部件附加到表单元素吗?


7

我有一个通用的表单元素:

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

我想将jquery ui datepicker添加到此元素。有没有一种方法可以通过表单api来执行此操作,或者我必须使用drupal_add_js添加以下内容:

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

还是还有另一种甚至更好的方法?

Answers:


4

您可以在表单中使用after_build来调用包含drupal_add_js的函数


我以前从未使用过“ #after_build”,但确实成功了。对于不熟悉此表单API属性的其他人员,它接受以$ element和$ form_state作为参数调用的函数名称数组。将自定义js添加到特定元素的方便。我还研究了定义自己的元素(la Date项目),但认为那太过分了。
meriial 2011年

用你的秘诀在这里放在一起covenantdesign.com/blog/...
约书亚Stewardson

4

一个更简单的解决方案是安装Date和Date Popup模块,并使用以下form api元素立即获取date popup元素。无需额外的js,包括所需的。

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

#date_format属性接受PHP日期格式的字符串,该字符串用作日期字段的输入格式。


4

日期项目包含一个模块(date_popup.module)实现一个date_popup表单元素。Drupal 6的date_popup.module定义了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()调用,它是date_popup表单字段中使用的#process函数。您可以编写一个包含与该函数执行的代码相似的代码的#process函数,并将其附加到要添加日期选择器的表单字段。


就我的目的而言,这就像一种魅力,它是向Web窗体添加自定义日期选择器。
RevNoah 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.