Làm cách nào để thêm plugin Jquery vào Drupal?


19

Tôi có nên dán mã vào tệp mẫu chính không, hoặc có cách nào khác được đề xuất để đính kèm các plugin Jquery mới trong Drupal 7 không?


Bạn đang muốn sử dụng loại plugin JQuery nào và tại sao? Thông thường, việc thêm bất kỳ loại Javascript nào cũng được thêm vào bằng cách sử dụng hàm drupal_add_js( api.drupal.org/api/drupal/includes--common.inc/feft/ Lỗi ).
Jamie Hollern

Câu trả lời:


15

Cách dễ nhất là chỉ cần thêm nó vào tệp .info của chủ đề của bạn:

scripts[] = js/my_jquery_plugin.js

Ngoại lệ duy nhất là nếu bạn đang thêm một tài nguyên bên ngoài (CDN / tập lệnh được lưu trữ), trong trường hợp đó bạn nên sử dụng drupal_add_js (), như được giải thích bởi Jamie Hollern


1
Nhưng bảng điều khiển chrome thay đổi tôi:Uncaught TypeError: undefined is not a function
TangMonk

@Alex Tôi có một câu hỏi ngớ ngẩn. Tôi biết Drupal đang sử dụng thư viện jquery. Giả sử tôi thêm chức năng "quay lại đầu trang" bằng cách sử dụng ý tưởng bạn có "scripts [] = js / back_to_top.js" trong theme.info. Tôi cũng cần thêm tệp jquery (như jquery v1.9, v1.11)?
CocoSkin

@CocoSkin bạn sẽ ổn thôi
Alex Weber

Thật ra - không. Điều đó không phải lúc nào cũng hoạt động. Hai ví dụ: 1) scripts [] = js / jquery.hoverintent.js 2) scripts [] = js / jquery.scrollme.js
sea26.2

Nói chung không phải là một cách tốt để làm điều đó. Làm thế nào để bạn kiểm soát những trang mà nó được tải trên? Sử dụngdrupal_add_library()
anthonygore

12

Drupal có Jquery đóng gói với nó.

Để thêm tệp js, bạn có thể sử dụng drupal_add_js theo cách được giải thích trong các bài đăng khác.

Điều này sẽ hoạt động trong các trường hợp đơn giản, nhưng nếu bạn bắt đầu có các plugin phụ thuộc vào các plugin khác. bạn có thể muốn nhìn vào thư viện api . Tôi hy vọng các mô-đun thời gian sẽ được tạo để hỗ trợ các thư viện phổ biến, có một số cho JQuery ui được tích hợp trong xem system_l Library () .

Trong ví dụ này để bao gồm mô đun jQuery ui.accordion, bạn có thể sử dụng drupal_add_l Library ()

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

Điều này sẽ đảm bảo js được bao gồm cùng với CSS và bất kỳ thư viện nào phụ thuộc vào nó. Nó cũng sẽ đảm bảo rằng các thư viện chỉ được bao gồm một lần.

Nếu bạn nói thư viện nào bạn đang sử dụng, tôi có thể cung cấp mã mẫu để biết cách xác định thư viện

Vì vậy, trước tiên hãy tạo một mô-đun để xác định thư viện (gọi nó là qtip) và tải mô-đun lên thư mục js bên dưới thư mục mô-đun

sau đó triển khai hook_l Library ()

function qtip_library() (
 $libraries['qTip'] = array(
    'title' => 'qTip', 
    'website' => 'http://craigsworks.com/projects/qtip/docs/', 
    'version' => '1.0.0-rc3', 
    'js' => array(
      drupal_get_path('module', 'qtip') . '/js/jquery.qtip-1.0.0.min.js' => array(),
    ),
    'dependencies' => array(
      array('system', 'jquery'),
    ),
  );
  return $libraries;
}

Sau đó, để thêm tập tin vào mã của bạn

drupal_add_library('qtip', 'qtip');

Điều này có thể là quá mức cần thiết cho một thư viện đơn giản nhưng nếu bạn phải quản lý một số lượng lớn các thư viện trên nhiều trang web và chủ đề thì nó sẽ làm cho cuộc sống dễ dàng hơn nhiều.


Cảm ơn, tôi đang sử dụng thư viện QTip - craigsworks.com/projects/qtip
Vonder

5

Nếu bạn chỉ muốn tải tập lệnh trên một số trang (không phải tất cả), bạn có thể thêm tập lệnh vào tệp template.php của mình. Chỉ cần thêm mã tương tự như thế này:

function YourTheme_preprocess_node(&$variables) {

 $node = $variables['node'];
if (!empty($node) && ($node->nid == 983)
 // here you can esily add more pages
) {

drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.core.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/jquery-ui-1.7.3.custom.js');
drupal_add_js('sites/all/libraries/jquery.ui/ui/ui.progressbar.js');

drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.progressbar.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.core.css');
drupal_add_css('sites/all/libraries/jquery.ui/themes/redmond/ui.theme.css');
 }
}

Tôi chỉ thử nghiệm điều này trong Drupal 6.


3

Bạn có thể thêm tệp JavaScript vào chủ đề bạn sử dụng trong trang web Drupal, bằng cách thêm một script[] =dòng trong tệp .info của chủ đề bạn đang sử dụng. Tôi sẽ chỉ xem xét trường hợp này nếu bạn đang sử dụng một chủ đề tùy chỉnh hoặc phiên bản sửa đổi của một chủ đề hiện có đã được đổi tên; Tôi sẽ không đề xuất làm điều đó nếu bạn đang sử dụng, ví dụ, Garland. Làm điều đó trong những trường hợp như vậy có nghĩa là mất tất cả các thay đổi trong tất cả các lần chủ đề được cập nhật hoặc sao chép các tệp chủ đề được cập nhật, sau đó áp dụng lại các thay đổi tương tự được áp dụng cho phiên bản trước của tệp; nếu thay đổi chỉ thêm một script[]dòng, thì thay đổi là tối thiểu và có thể đáng để thực hiện, nhưng điều đó cũng có nghĩa là các tệp JavaScript không được thêm vào trong thư mục chứa các tệp chủ đề hoặc bạn nên thêm các tệp JavaScript mỗi thời gian chủ đề được cập nhật.

Thay vào đó, bạn có thể tạo một mô-đun tùy chỉnh hoặc thêm mã vào mô-đun tùy chỉnh hiện có mà bạn đang sử dụng cho trang web đó.
Điểm nổi bật là các tệp JavaScript sẽ được thêm vào mọi chủ đề được đặt làm mặc định hoặc chủ đề quản trị mà không cần thay đổi tất cả các chủ đề được bật trên trang web và người dùng có thể tự chọn.

Như đã báo cáo trong một câu trả lời khác, hook_init()là cái móc bạn nên thực hiện. Tôi sẽ thêm đó hook_library()là hook mới được thêm vào trong Drupal 7 cho các tệp Javascript như các trình cắm thêm jQuery.


3

Bạn có thể sử dụng mô-đun Js Injection để thêm tập lệnh trực tiếp vào bảng quản trị Drupal. Ngoài ra, bạn có thể sử dụng hàm drupal_add_js () để thêm tệp js vào trang của mình.


Tôi nghĩ rằng đây chính xác là những gì tôi cần, tôi sẽ chọn câu trả lời của bạn là tốt nhất, nhưng tôi muốn xem liệu các giải pháp khác có tồn tại trước không;)
Bruno Vincent

bạn có thể thêm dòng này vào theme.info script [] = 'đường dẫn đến tệp của bạn' đó là một phương thức nhưng với phương thức này, js sẽ được tải trên tất cả các trang của bạn, thông thường không phải là một cách thực hành tốt. Với hai phương pháp trên, bạn có thể thêm js vào chính xác những trang bạn muốn.
Shabir A.

1

Bạn có thể tạo một mô-đun tùy chỉnh đơn giản và thêm nó theo cách đó. Mã này sẽ tương tự như sau:

MYMODULE_init() {
  drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/FILE.js');
}

mô-đun tùy chỉnh để thêm JQuery? Nghiêm túc?
Vonder

chỉ khi nó ở bên ngoài, hãy xem câu trả lời của tôi
Alex Weber

1

Bạn chỉ có thể sử dụng trong YOURTHEME_preprocess_theme()nếu bạn muốn áp dụng điều kiện logic:

drupal_add_js(drupal_get_path('theme','your_theme').'/js/yourplugin.js');

và thêm vào trong tập tin yourtheme.info:

scripts[] = js/yourplugin.js


1

Nếu bạn đang sử dụng mô-đun Ngữ cảnh, hãy cài đặt Ngữ cảnh Thêm tài sản. Thiết lập bối cảnh toàn cầu hoặc bối cảnh cụ thể và thêm phản ứng mới để thêm nội dung JS theo đường dẫn hoặc theo mô-đun.

Không cần mã hóa.


Cảm ơn! Điều này có lợi thế là bạn có thể giới hạn các thư viện trong các đường dẫn cụ thể, nhưng không yêu cầu mã hóa.
Druvision

1
Nhưng đối với các plugin jQuery như textext.js, bao gồm trung bình 5 tệp CSS và 5 tệp JS, thì vẫn còn rất nhiều việc.
Druvision

1

Có rất nhiều thư viện bên ngoài cần được đưa vào ngày nay.

Đặt tất cả chúng trong thư mục js của chủ đề không phải lúc nào cũng được mong muốn vì đôi khi các thư viện đó bao gồm nhiều tệp js và nhiều tệp css.

Tôi đã kết thúc bằng cách sử dụng libraries_get_pathchức năng của mô-đun thư viện để lấy đường dẫn của chúng từ thư mục của trang web / all / library:

Đây là cách tôi đã thêm các tệp đã chọn liên quan đến textext.js:

<?php 
function MYMODULE_init() {

  // Add jQuery library to a specific page.
  if (arg(0) == 'messages' && arg(1) == 'new') {
    // Add the jQuery TextExt library ( http://textextjs.com/ )
    $libdir = libraries_get_path('jquery-textext');
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.core.js");
    drupal_add_js("$libdir/src/js/textext.plugin.tags.js");
    drupal_add_js("$libdir/src/js/textext.plugin.autocomplete.js");
    drupal_add_js("$libdir/src/js/textext.plugin.suggestions.js");
    drupal_add_js("$libdir/src/js/textext.plugin.filter.js");
    drupal_add_js("$libdir/src/js/textext.plugin.focus.js");
    drupal_add_js("$libdir/src/js/textext.plugin.prompt.js");
    drupal_add_js("$libdir/src/js/textext.plugin.ajax.js");
    drupal_add_js("$libdir/src/js/textext.plugin.arrow.js");

    drupal_add_css("$libdir/src/css/textext.core.css");
    drupal_add_css("$libdir/src/css/textext.plugin.tags.css");
    drupal_add_css("$libdir/src/css/textext.plugin.autocomplete.css");
    drupal_add_css("$libdir/src/css/textext.plugin.focus.css");
    drupal_add_css("$libdir/src/css/textext.plugin.prompt.css");
    drupal_add_css("$libdir/src/css/textext.plugin.arrow.css");
  }

} ?>

Tôi rất muốn nghe nếu có một kho lưu trữ bên ngoài trong đó tất cả các thư viện đó được xác định trước vì vậy tôi sẽ không phải xác định chúng theo cách thủ công.


Làm thế nào để bạn thêm các trang trong đó?
Umair


0

đây là những gì làm việc cho tôi, không cần phải tạo mô-đun cho plugin jQuery hoặc cài đặt một cái - trong template.php của tôi. Tôi đã thêm:

function YOURTHEME_js_alter(&$javascript){
    // overwriting for newer jQuery version
    $javascript['misc/jquery.js']['data'] = path_to_theme() . '/assets/js/jquery-1.9.0.js';
    // also the min...
    $javascript['misc/ui/jquery.ui.core.min.js']['data'] = path_to_theme() . '/assets/js/jquery-ui-1.10.0.custom.min.js';
    // here I add the library (jQuery plugin) to resolve an error -> $.browser.msie undefined
    $javascript[path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js'] = array(   
        "group" => -100,
        "weight" => -18.990,
        "version" => "1.1.0",
        "every_page" => true,
        "type" =>   "file",
        "scope" => "header",
        "cache" => true,
        "defer" => false,
        "preprocess" => true,
        "data" =>  path_to_theme() . '/assets/js/jquery-migrate-1.1.0.min.js',
    );

}

-4

một cách khác là thêm mã sau vào tệp page.tpl.php
drupal_add_js (drupal_get_path ('theme', 'path / to / your / plugin'). '/plugin.js', 'file');


4
Thêm mã trực tiếp vào các mẫu được coi là thực hành xấu.
mpdon Arena

"Thêm mã trực tiếp vào các mẫu được coi là thực tiễn xấu" ... vậy mô-đun SQL SQL là cách thực hành tốt nhất sau đó?
Bruno Vincent

Một vài trong số những cách khác được đề cập có thể được coi là thông lệ tốt @BrunoVincent, nó phụ thuộc vào mức độ bạn muốn tấn công này (mã trong một chủ đề, mã trong mô-đun tùy chỉnh hoặc chỉ cài đặt một mô-đun như js tiêm)
Clive

trong một số trường hợp là hữu ích để làm như thế này, ví dụ bạn muốn thêm một điều kiện tệp javascript
houmem
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.