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?

meriial
sumber

Jawaban:

4

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

digital
sumber
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.

tuan
sumber
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.

kiamlaluno
sumber
Ini berfungsi seperti pesona untuk tujuan saya, yaitu untuk menambahkan datepicker khusus ke webform.
RevNoah