一般的なフォーム要素があります:
$form['date'] = array(
'#type' => 'textfield',
'#title' => t( 'Date' ),
);
この要素にjquery ui datepickerを追加したいこと。フォームapiを使用してこれを行う方法はありますか、またはdrupal_add_jsを使用して以下を追加する必要がありますか?
$('#edit-date').datepicker();
それとも、もっと良い方法がありますか?
フォームで after_build を使用して、 drupal_add_js を含む関数を呼び出すことができます
Date プロジェクトには、date_popupフォーム要素を実装するモジュール(date_popup.module)が含まれています。 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関数を記述し、日付ピッカーを追加するフォームフィールドに添付できます。