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

7

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?

meriial
la source

Réponses:

4

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

numérique
la source
Je n'avais jamais utilisé '#after_build' auparavant, mais ça a fait l'affaire. Pour les autres utilisateurs de cette propriété API de formulaire, il prend un tableau de noms de fonctions qui sont appelés avec $ element et $ form_state comme paramètres. Pratique pour ajouter des js personnalisés à un élément spécifique. J'ai également cherché à définir mon propre élément (un projet à la date) mais j'ai décidé que c'était exagéré.
Meriial
Utilisé vos conseils ici pour rassembler covenantdesign.com/blog/…
Joshua Stewardson
4

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 au format PHP Date qui est utilisée comme format d'entrée pour le champ de date.

Master chef
la source
4

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, ni n'est une fonction principale de 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 à partir de date_popup_element_process () , qui est la fonction #process utilisée dans le 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.

kiamlaluno
la source
Cela a fonctionné comme un charme à mes fins, qui était d'ajouter un sélecteur de date personnalisé à un formulaire Web.
RevNoah du