Kann ich ein jquery.ui.datepicker-Widget mithilfe der Formular-API an ein Formularelement anhängen?

7

Ich habe ein generisches Formularelement:

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

Dass ich diesem Element den jquery ui datepicker hinzufügen möchte. Gibt es eine Möglichkeit, dies über die Formular-API zu tun, oder muss ich mit drupal_add_js Folgendes hinzufügen:

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

Oder gibt es einen anderen, noch besseren Weg?

meriial
quelle

Antworten:

4

Sie können after_build in Ihrem Formular verwenden, um eine Funktion aufzurufen , die drupal_add_js enthält

Digital
quelle
Ich hatte '#after_build' noch nie benutzt, aber es hat den Trick gemacht. Für andere Benutzer dieser Formular-API-Eigenschaft wird ein Array von Funktionsnamen verwendet, die mit $ element und $ form_state als Parameter aufgerufen werden. Praktisch zum Hinzufügen von benutzerdefinierten js zu einem bestimmten Element. Ich habe mich auch mit der Definition meines eigenen Elements befasst (a la Date-Projekt), aber festgestellt, dass dies übertrieben ist.
Meriial
Verwenden Sie Ihre Tipps hier, um covenantdesign.com/blog/…
Joshua Stewardson
4

Eine viel einfachere Lösung ist die Installation Datum und Datum Popup - Module und verwenden Sie das folgende Formular api Element sofort ein Datum Popup - Element zu erhalten. Keine zusätzlichen js inklusive erforderlich.

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

Das Attribut #date_format akzeptiert eine mit PHP Date formatierte Zeichenfolge, die als Eingabeformat für das Datumsfeld verwendet wird.

Meisterhäuptling
quelle
4

Das Date- Projekt enthält ein Modul (date_popup.module), das ein date_popup-Formularelement implementiert. date_popup.module für Drupal 6 hat die Funktion date_popup_load () definiert , aber die Funktion ist in der Version für Drupal 7 des Moduls weder vorhanden noch eine Drupal-Kernfunktion.

Die Funktion umfasste die erforderlichen JavaScript-Dateien.

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

Die entsprechende Funktion in der Drupal 7-Version des Moduls ist date_popup_add () , die den folgenden Code enthält.

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

Diese Funktion wird von date_popup_element_process () aufgerufen. Dies ist die # process-Funktion, die im Formularfeld date_popup verwendet wird. Sie können eine # process-Funktion schreiben, die Code enthält, der dem von dieser Funktion ausgeführten Code ähnelt, und ihn an das Formularfeld anhängen, zu dem Sie die Datumsauswahl hinzufügen möchten.

kiamlaluno
quelle
Dies funktionierte für meine Zwecke wie ein Zauber, der darin bestand, einem Webformular einen benutzerdefinierten Datepicker hinzuzufügen.
RevNoah