Sử dụng giao diện người dùng jQuery tích hợp trong chủ đề của tôi


25

Mỗi trang trong chủ đề của tôi sẽ cần sử dụng giao diện người dùng jquery. Tôi biết nó được bao gồm trong Drupal 7, nhưng tôi thực sự không thể giải mã được tài liệu quá kỹ thuật của Drupal. Có vẻ như cách duy nhất để làm điều đó là với tệp template.php. Nhưng vì tôi không hiểu tập tin đó, tôi đang cố gắng tránh làm theo cách đó.

Có cách nào khác không, hay tôi chỉ nên thử tập tin template.php?


Bạn đang cố làm gì vậy? Tất cả các chức năng UI jquery và những gì không nên có sẵn cho bạn. Thực thi mã JS tùy chỉnh trên mỗi trang? Thực hiện nó trên một trang cụ thể? một sự kiện cụ thể? Có rất nhiều cách để khiến JS thực thi, cụ thể là drupal_add_js
LSU_JBob

Tôi đang cố gắng sử dụng .datepicker () trên một số trường xuất hiện trong mỗi trang trong chủ đề của tôi. Có lẽ một số thứ nữa sau này quá.
Bến

@Ben Hãy nhớ thưởng tiền thưởng nếu một câu trả lời giải quyết vấn đề của bạn.
googletorp

@googletorp Xin lỗi, tiền thưởng đầu tiên của tôi. Tiền thưởng được trao.
Ben

Tôi cảm thấy như nhiều câu trả lời bỏ qua bước cuối cùng, rằng một khi bạn bao gồm drupal_add_l Library ('system', 'ui.button') hoặc bất cứ điều gì, bạn cần thêm một hoặc hai dòng javascript vào chủ đề của bạn mà thực sự gọi cắm vào.
Ryan Giá

Câu trả lời:


36

Thêm JS vào một trang thực sự không khó lắm, mặc dù bạn cần sử dụng php.

Đối với các tệp JS bình thường, bạn có thể làm một cái gì đó như thế này

drupal_add_js($path_to_js)

Tuy nhiên, Drupal đã đăng ký UI UI vào các thư viện, giúp dễ dàng thêm cả các tệp JS và CSS cho các plugin UI UI nhất định. Điều này có thể được thực hiện bằng cách sử dụng

drupal_add_library($module, $library);

Tất cả các plugin UI UI tồn tại trong mô-đun hệ thống, vì vậy bạn có thể làm

drupal_add_library('system', 'ui');

hoặc là

drupal_add_library('system', 'ui.accordion');

Một số plugin này có phần phụ thuộc vì chúng sử dụng các plugin khác. Drupal xử lý việc này rất thông minh và sẽ bao gồm các thành phần cần thiết.

Bạn có thể xem danh sách đầy đủ các plugin jQuery tại đây . Điều này được định dạng như một mảng PHP, nhưng nói chung quy ước đặt tên là ui.PLUGIN-NAME.

Nếu bạn cần thêm JS trên mỗi trang, bạn chỉ cần thêm một móc trang tiền xử lý và thêm chúng vào đó. Điều này sẽ trông giống như thế này trong tệp template.php.

function NAME_OF_THEME_preprocess_page(&$variables) {
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.accordion');
  drupal_add_library('system', 'effects.highlight');
}

Tôi đã thử thêm chính xác những gì bạn có ở đây (nhưng sử dụng tên chủ đề của tôi thay cho NAME_OF_THEME) vào template.php và nó không hoạt động. Có ý kiến ​​gì không? Đây là những gì tôi có: function nocturnal_preprocess_page(&$variables) { drupal_add_library('system', 'ui'); drupal_add_library('system', 'ui.datepicker'); }
Ben

@ben Bạn cần xóa bộ nhớ cache mỗi khi bạn thêm hàm hook hoặc tiền xử lý mới. Hãy thử xóa bộ nhớ cache. Bạn cũng cần một cách để kiểm tra xem nó có hoạt động không, vì bạn chỉ thêm các tệp JS sẽ không tự làm được gì.
googletorp

Tôi đã xóa bộ nhớ cache và nó sẽ hoạt động trên một số trường ngày trước đó sử dụng giao diện người dùng jquery được tham chiếu thủ công. Vẫn gỡ lỗi, nhưng không thể tìm thấy bất cứ điều gì sai cho đến nay.
Ben

@Ben Bước đầu tiên là xem nguồn và xem các tệp đã được bao gồm chưa (tắt tính năng tổng hợp JS nếu được bật)
googletorp

3
@googletorp: Ông có thể giải thích một chút về betweeen khác biệt drupal_add_library('system', 'ui');drupal_add_library('system', 'ui.accordion');? Là người đầu tiên tìm nạp mọi thứ hay chỉ là cốt lõi? Tôi có cần một dòng cho mỗi plugin tôi sử dụng không?
Jarl

4

bạn đã thử mô-đun date_popup chưa? hoạt động tốt với API biểu mẫu


Tôi không muốn một mô-đun vì hình thức cần nó rất phức tạp và yêu cầu mã hóa tùy chỉnh. Nó được mã hóa cứng vào mẫu cho chủ đề. Tôi đang cố gắng tìm ra cách tốt nhất để sử dụng giao diện người dùng jquery đi kèm với Drupal. Cách duy nhất tôi có thể khiến nó hoạt động là đặt nó vào thư mục của chủ đề của tôi và liên kết với nó ở đó. Nhưng vì tôi đang chạy nhiều trang web trên một cài đặt Drupal và tất cả các trang web này sẽ cần Giao diện người dùng jQuery, tôi muốn chỉ sử dụng Giao diện người dùng jQuery tích hợp để ngăn công việc trùng lặp.
Bến

bạn sẽ có thể gọi bất kỳ công cụ jquery ui từ bất kỳ trang web nào và thêm nó vào, đó là trong lõi drupal. Là biểu mẫu được xây dựng với API Mẫu?
LSU_JBob

2
Tại sao biểu mẫu được xây dựng trong các tệp mẫu? điều đó không quá đáng sợ ... nếu bạn không sử dụng API biểu mẫu, bạn đang bỏ lỡ một số lợi ích, như bảo mật tích hợp từ các cuộc tấn công SQL SQL. Tôi thực sự khuyên bạn nên lấy biểu mẫu của mình ra khỏi các tệp mẫu và viết mô-đun tùy chỉnh nơi bạn tạo biểu mẫu bằng API biểu mẫu. Cố gắng không trở thành cao bồi. Trong mọi trường hợp, bạn có thể tham khảo javascript từ bất cứ đâu bằng cách sử dụng drupal_add_js, đại loại như drupal_add_js ('/ misc / ui / jquery.ui.core.min.js', 'file'); VÀ drupal_add_js ('/ misc / ui / jquery.ui.datepicker.js', 'tập tin');
LSU_JBob

3
Tạo biểu mẫu trong mô-đun tùy chỉnh bằng API biểu mẫu, sau đó trong tệp tpl gọi kết xuất (drupal_get_form ('form_id')); Tôi hứa mẫu api, có thể với một số javascript tùy chỉnh, có thể xử lý bất kỳ yêu cầu phức tạp nào bạn có. Tôi cảm thấy như bạn chỉ làm mọi thứ trở nên khó khăn hơn bằng cách cố gắng nhồi nhét tất cả các chức năng này vào một tệp tpl. Về mặt kỹ thuật, đó là lớp chủ đề, vì vậy không phải là cách tốt nhất để tạo ra các khối lớn của mã back-end chức năng trong đó.
LSU_JBob

3
Tôi nghĩ rằng anh ấy đang nói TẠO một mô-đun. Những thứ chức năng, như các hình thức, thuộc về các mô-đun. API biểu mẫu cho phép bạn tạo bất kỳ loại biểu mẫu nào bạn có thể tưởng tượng trong mô-đun tùy chỉnh của riêng bạn. Chủ đề phải độc lập về chức năng trong hầu hết các trường hợp. Điều đó sẽ giúp bạn linh hoạt hơn trên đường.
Jonathan Rowny

4
  1. Tái cấu trúc biểu mẫu được mã hóa cứng của bạn trong tệp .tpl thành triển khai API Mẫu. Giống như @LSU_JBob đã nói, không có lý do gì bạn nên tạo một biểu mẫu mà không sử dụng FAPI. Tôi khuyên bạn nên đọc Hướng dẫn khởi động nhanh API mẫu và đánh dấu trang tham chiếu API mẫu .
  2. Khi bạn đã xây dựng biểu mẫu của mình và bạn có thể gửi các giá trị cho nó, xử lý nó, v.v., hãy tải xuống và đọc mã trong mô-đun ngày đóng góp. Ngày được sử dụng để cung cấp loại cửa sổ bật lên ngày bạn muốn tạo, nhưng đối với CCK trong D6 và Trường lõi trong D7. Mặc dù bạn không muốn làm việc với các trường, mô-đun Date sử dụng Giao diện người dùng JQuery để thực hiện những gì bạn đang cố gắng thực hiện. Mô-đun này sẽ cung cấp cho bạn một ví dụ vững chắc.

Cảm ơn. Những liên kết này rất hữu ích. Tôi không thực sự muốn vào PHP, nhưng tôi đoán để làm chính xác những gì tôi muốn làm trong trường hợp này, tôi phải làm. Có lẽ tôi sẽ chỉ giữ nó trong tệp tpl vì thời gian, vì hiện tại tôi không có thời gian để học Drupal PHP. Lời khuyên tốt từ mọi người mặc dù.
Ben

3

Cảm ơn đã googletorptrả lời này.

Chỉ cần thêm, nếu mọi thứ vẫn chưa rõ ràng liên quan đến việc kích hoạt plugin UI .

Xin lưu ý rằng khi bạn sẽ đề cập: drupal_add_library('system', 'ui');
Điều này sẽ KHÔNG tự động kích hoạt tất cả các plugin ui.

Bạn có thể tìm thấy danh sách các plugin ui jquery có sẵn trong drupal 7 tại đây: /misc/ui/

Để kích hoạt plugin vuông góc, ví dụ : jquery.ui.slider.min.js, bạn cần thêm dòng này:

drupal_add_library('system', 'ui.slider');

Hy vọng điều này là hữu ích.


2

Tôi đã có vấn đề này gần đây. Ai đó đã cho tôi mô-đun tùy chỉnh của họ để buộc JQuery UI tải trên mỗi trang. Bạn có thể tạo lại nó một cách đơn giản. Đầu tiên, cài đặt jquery_update và đảm bảo rằng nó hoạt động. Sau đó, tạo và kích hoạt mô-đun này:

Tạo một thư mục trong đường dẫn / đến / mô-đun có tên 'jquery_force'.

Bên trong, thêm hai tệp:

jquery_force.info :

name = JQuery UI Force
description = Forces JQuery UI to always load
dependencies[] = jquery_update
package = User Interface
core = 7.x
files[] = jquery_force.module

jquery_force.module :

<?php
/**
 * @file jquery_force.module
 * TODO: Enter file description here.
 */

/**
 * Implements hook_init().
 */
function jquery_force_init() {
    drupal_add_library('system', 'ui');
}

2

Thêm một móc tiền xử lý trong template.phptệp không hoạt động đối với tôi.

Tôi chỉ đơn giản là đưa drupal_add_library('system', 'ui');vào template.phptập tin của chính nó, làm việc.

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.