Bisakah saya melampirkan widget jquery.ui.datepicker ke elemen formulir menggunakan formulir api?


7

Saya memiliki elemen bentuk umum:

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

Bahwa saya ingin menambahkan datepicker jquery ui ke elemen ini. Apakah ada cara untuk melakukan ini melalui formulir api, atau apakah saya harus menambahkan yang berikut ini menggunakan drupal_add_js:

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

Atau ada cara lain yang lebih baik?

Jawaban:


4

Anda dapat menggunakan after_build dalam formulir Anda untuk memanggil fungsi yang berisi drupal_add_js


Saya belum pernah menggunakan '#after_build' sebelumnya, tetapi itu berhasil. Untuk orang lain yang baru mengenal properti API formulir ini, dibutuhkan array nama fungsi yang dipanggil dengan $ element dan $ form_state sebagai parameter. Berguna untuk menambahkan js khusus ke elemen tertentu. Saya juga melihat ke dalam mendefinisikan elemen saya sendiri (a la Date project) tetapi memutuskan bahwa itu berlebihan.
meriial

Gunakan tips Anda di sini untuk mengumpulkan covenantdesign.com/blog/...
Joshua Stewardson

4

Sebuah solusi yang jauh lebih mudah untuk ini adalah dengan menginstal Tanggal dan Tanggal Popup modul dan menggunakan elemen bentuk api berikut untuk segera mendapatkan elemen tanggal popup. Tidak ada tambahan js termasuk yang dibutuhkan.

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

Atribut #date_format menerima string berformat Tanggal PHP yang digunakan sebagai format input untuk bidang tanggal.


4

Proyek Date berisi modul (date_popup.module) yang mengimplementasikan elemen bentuk date_popup. date_popup.module untuk Drupal 6 mendefinisikan fungsi date_popup_load () , tetapi fungsi tersebut tidak ada dalam versi untuk Drupal 7 modul, juga bukan fungsi inti Drupal.

Apa fungsi itu adalah memasukkan file JavaScript yang diperlukan.

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

Fungsi yang setara hadir dalam versi Drupal 7 modul adalah date_popup_add () , yang berisi kode berikut.

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

Fungsi itu disebut dari date_popup_element_process () , yang merupakan fungsi #process yang digunakan dari bidang formulir date_popup. Anda bisa menulis fungsi proses #proses yang berisi kode yang mirip dengan yang dieksekusi dari fungsi itu, dan melampirkannya ke bidang formulir yang ingin Anda tambahkan pemilih tanggal.


Ini berfungsi seperti pesona untuk tujuan saya, yaitu untuk menambahkan datepicker khusus ke webform.
RevNoah
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.