J'ai un élément de formulaire générique:
$form['date'] = array(
'#type' => 'textfield',
'#title' => t( 'Date' ),
);
Que je veux ajouter le sélecteur de date jquery ui à cet élément. Existe-t-il un moyen de le faire via le formulaire api, ou dois-je ajouter ce qui suit en utilisant drupal_add_js:
$('#edit-date').datepicker();
Ou existe-t-il un autre moyen encore meilleur?
Vous pouvez utiliser after_build dans votre formulaire pour appeler une fonction qui contient drupal_add_js
Une solution beaucoup plus simple consiste à installer les modules Date et Date Popup et à utiliser l'élément api de formulaire suivant pour obtenir instantanément un élément popup date. Aucun js supplémentaire, y compris nécessaire.
$form['date'] = array(
'#type' => 'date_popup',
'#title' => t('Date'),
'#date_format' => 'd/m/Y',
);
L'attribut #date_format accepte une chaîne formatée PHP Date qui est utilisée comme format d'entrée pour le champ de date.
Le projet Date contient un module (date_popup.module) qui implémente un élément de formulaire date_popup. date_popup.module pour Drupal 6 a défini la fonction date_popup_load () , mais la fonction n'est pas présente dans la version pour Drupal 7 du module, ce n'est pas non plus une fonction de base Drupal.
La fonction a consisté à inclure les fichiers JavaScript nécessaires.
$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');
}
La fonction équivalente présente dans la version Drupal 7 du module est date_popup_add () , qui contient le code suivant.
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');
}
Cette fonction est appelée depuis date_popup_element_process () , qui est la fonction #process utilisée à partir du champ de formulaire date_popup. Vous pouvez écrire une fonction #process contenant un code similaire à celui exécuté à partir de cette fonction et l'attacher au champ de formulaire auquel vous souhaitez ajouter le sélecteur de date.