web-dev-qa-db-fra.com

Puis-je attacher un widget jquery.ui.datepicker à un élément de formulaire à l'aide de l'API de formulaire?

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?

7
meriial

Vous pouvez utiliser after_build dans votre formulaire pour appeler une fonction qui contient drupal_add_js

4
digital

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.

4
masterchief

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.

4
kiamlaluno