Posso collegare un widget jquery.ui.datepicker a un elemento del modulo usando l'API del modulo?


7

Ho un elemento di forma generico:

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

Che voglio aggiungere il jpery ui datepicker a questo elemento. C'è un modo per farlo attraverso il modulo API o devo aggiungere quanto segue usando drupal_add_js:

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

O c'è un altro modo ancora migliore?

Risposte:


4

È possibile utilizzare after_build nel modulo per chiamare una funzione che contiene drupal_add_js


Non avevo mai usato "#after_build" prima, ma ha funzionato. Per altre persone che non conoscono questa proprietà API del modulo, accetta una matrice di nomi di funzioni chiamati con $ element e $ form_state come parametri. Comodo per aggiungere js personalizzati a un elemento specifico. Ho anche cercato di definire il mio elemento (un progetto la Date) ma ho deciso che era eccessivo.
meriial

Ho usato i tuoi consigli qui per mettere insieme covenantdesign.com/blog/…
Joshua Stewardson,

4

Una soluzione molto più semplice a ciò è installare i moduli Popup Data e Data e usare il seguente elemento api form per ottenere immediatamente un elemento popup data. Non sono necessari js extra.

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

L'attributo #date_format accetta una stringa formattata Data PHP che viene utilizzata come formato di input per il campo data.


4

Il progetto Date contiene un modulo (date_popup.module) che implementa un elemento del modulo date_popup. date_popup.module per Drupal 6 ha definito la funzione date_popup_load () , ma la funzione non è presente nella versione per Drupal 7 del modulo, né è una funzione core di Drupal.

Ciò che ha fatto la funzione è stato quello di includere i file JavaScript necessari.

  $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 funzione equivalente presente nella versione Drupal 7 del modulo è date_popup_add () , che contiene il seguente codice.

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');
} 

Tale funzione viene chiamata da date_popup_element_process () , che è la funzione #process utilizzata dal campo del modulo date_popup. È possibile scrivere una funzione #process contenente codice simile a quello eseguito da quella funzione e collegarlo al campo modulo a cui si desidera aggiungere il selettore di date.


Questo ha funzionato come un incantesimo per i miei scopi, che era quello di aggiungere un datepicker personalizzato a un modulo web.
RevNoah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.