Tôi có thể đính kèm tiện ích jquery.ui.datepicker vào phần tử biểu mẫu bằng biểu mẫu api không?


7

Tôi có một yếu tố hình thức chung:

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

Rằng tôi muốn thêm datepicker jquery ui vào yếu tố này. Có cách nào để thực hiện việc này thông qua biểu mẫu api không, hoặc tôi phải thêm phần sau bằng cách sử dụng drupal_add_js:

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

Hoặc có cách nào khác, thậm chí tốt hơn?

Câu trả lời:


4

Bạn có thể sử dụng after_build trong biểu mẫu của mình để gọi một hàm có chứa drupal_add_js


Tôi chưa bao giờ sử dụng '#after_build' trước đây, nhưng nó đã làm được điều đó. Đối với những người khác mới sử dụng thuộc tính API của biểu mẫu này, nó sẽ lấy một mảng các tên hàm được gọi với phần tử $ và $ form_state làm tham số. Tiện dụng để thêm js tùy chỉnh vào một yếu tố cụ thể. Tôi cũng đã xem xét việc xác định yếu tố của riêng tôi (một dự án la la) nhưng quyết định đó là quá mức cần thiết.
meriial

Đã sử dụng mẹo của bạn ở đây để kết hợp covenantdesign.com/blog/ Kẻ
Joshua Stewardson

4

Một giải pháp dễ dàng hơn nhiều cho điều này là để cài đặt ngày và ngày Popup module và sử dụng các yếu tố hình thức api sau để ngay lập tức nhận được một yếu tố ngày popup. Không có js thêm bao gồm cần thiết.

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

Thuộc tính #date_format chấp nhận chuỗi định dạng Ngày PHP được sử dụng làm định dạng đầu vào cho trường ngày.


4

Các ngày dự án có chứa một mô-đun (date_popup.module) mà thực hiện một yếu tố hình thức date_popup. date_popup.module cho Drupal 6 đã định nghĩa hàm date_popup_load () , nhưng chức năng này không có trong phiên bản dành cho Drupal 7 của mô-đun, cũng không phải là chức năng lõi Drupal.

Những gì chức năng đã làm là bao gồm các tệp JavaScript cần thiết.

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

Hàm tương đương có trong phiên bản Drupal 7 của mô-đun là date_popup_add () , chứa mã sau đây.

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

Hàm đó được gọi từ date_popup_element_ process () , là hàm # process được sử dụng từ trường biểu mẫu date_popup. Bạn có thể viết một hàm # process chứa mã tương tự như hàm được thực thi từ hàm đó và đính kèm nó vào trường biểu mẫu mà bạn muốn thêm bộ chọn ngày.


Điều này hoạt động như một cơ duyên cho mục đích của tôi, đó là thêm một công cụ hẹn hò tùy chỉnh vào một biểu mẫu web.
RevNoah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.