Chỉ bao gồm một phiên bản jQuery khác trên trang cụ thể


16

Mô-đun cập nhật jQuery bao gồm tập lệnh này.

<script type="text/javascript" src="/sites/all/modules/jquery_update/replace/jquery.min.js?6"></script>

Tôi cần điều này trên mỗi trang, ngoại trừ một tệp mẫu nhất định mà tôi đang sử dụng hộp ưa thích và cần một phiên bản jQuery mới hơn.

Tôi cần loại trừ cập nhật jQuery khỏi việc đưa tập lệnh trên vào $scriptsbiến CHỈ trên page-media-photos.tpl.php. Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


10

Đây là lựa chọn của bạn:

  • Sử dụng jQuery Multi , như đã đề cập trong một câu trả lời khác. Nó có thể được cấu hình để tải phiên bản cao hơn của jQuery ngay trên trang đó và chỉ cho hộp ưa thích. Nó sẽ không can thiệp vào jQuery của Drupal hoặc với jQuery của jquery_update.
  • Trong Drupal 7, bạn có thể sử dụng hook_js_alter () , điều này sẽ cho phép bạn trao đổi phiên bản của jquery_update với bất cứ điều gì bạn muốn.
  • Trong Drupal 6 với jQuery Update , nó cung cấp một hook cho phép bạn thay đổi JS sau khi hoàn thành công việc. Bạn có thể xem mã jQuery Multi 6.x để xem cách nó sử dụng hook này .
  • Trong Drupal 6 không có Cập nhật jQuery , bạn có thể thực hiện việc này bằng cách sử dụng hook pre process_page. Các $scriptsbiến sẽ có mặt ở đó, và bạn có thể thay đổi nó. Điều này có thể nhận được một chút khó khăn. Bạn cũng có thể thấy cách qmulti làm điều này . jQuery Update cũng thực hiện điều này theo cách tương tự.

Hãy nhớ rằng việc hoán đổi sang phiên bản jQuery cao hơn có thể phá vỡ một số thứ trong lõi và đóng góp của Drupal, đây là vấn đề mà jQuery Multi giải quyết. Vì vậy, nếu bạn làm điều này, đảm bảo bạn sẽ không phá vỡ bất cứ điều gì. Lợi ích ở đây là bạn chỉ cần tải jQuery bạn cần, trong khi với jQuery Multi, bạn sẽ tải cả hai.


Lưu ý, hook_js_alter không khả dụng trong D6
David Thomas

2
Thay đổi câu trả lời để có thông tin D6 là tốt.
goron

Tôi đồng ý với việc sử dụng jQuery multi nếu bạn muốn chạy nhiều phiên bản jQuery. Tôi chỉ khuyên bạn nên cập nhật jquery nếu bạn muốn chạy phiên bản mới hơn cho toàn bộ trang web của mình. Ngoài ra, theo kinh nghiệm của tôi, bản cập nhật jquery cho jquery 1.7 & 1.8 vẫn còn lỗi để sử dụng trong sản xuất.
rooby

3

Có một mô-đun jQuery đa . Mô-đun này cho phép bạn có multiple versions of jQuery run paralleltrong trường hợp drupal của bạn. Nó cung cấp một aliascho mỗi trường hợp mà bạn có thể sử dụng để gọi phiên bản jquery đó.


3

Nếu bạn gặp rắc rối với jqueryupdate và xem các trang quản trị (ví dụ) hãy thử cài đặt phiên bản Dev của ctools và mọi thứ sẽ ổn, hãy tự kiểm tra.


3

Vui lòng tìm mã này có thể hữu ích, Đặt mã này vào template.php của bạn

function MYTHEME_preprocess_page(&$vars) {
  $scripts = drupal_add_js();
  if (in_array('page-media-photos', $vars['template_files'])) {
    unset($scripts['all']['module']['PATH_OF_JS_NEED_TO_REMOVE']);
  }
  $vars['scripts'] = drupal_get_js('header', $scripts);
}

PATH_OF_JS_NEED_TO_REMOVE đưa ra đường dẫn của js cho ex: các trang web / tất cả / mô-đun / og / og.js


hàm phptemplate_pre process_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ('page-media-photos', $ vars ['template_files']))) min.js ']); $ vars ['scripts'] = drupal_get_js ('tiêu đề', $ scripts); } điều này dường như không hoạt động
albo

Tôi đã nâng cấp nhưng nó không hoạt động
albo

Tôi đã cập nhật mã để cho biết rằng bạn cần thay thế MYTHEME bằng tên chủ đề của mình thay vì sử dụng "phptemplate". Ngoài ra, tôi không khuyên bạn nên sử dụng kiểu tiếp cận này để xóa thư viện mà các js khác phụ thuộc vào, như jQuery, vì điều này không tính đến thứ tự js được tải và bạn có thể kết thúc với jquery là lỗi không xác định nếu khác Các plugin jQuery được tải trước một phiên bản của jQuery. Ngoài ra, cách thức hoạt động của bản cập nhật jQuery phức tạp hơn là không đặt tệp js.
rooby

2

Drupal 7

Bạn có thể gọi jquery_update_jquery_replace()trên trang cụ thể (ví dụ như trong hook_library_alter()) như được trình bày ở đây bởi drupalmoff :

<?php
/**
 * Implements hook_module_implements_alter().
 */
function your_module_module_implements_alter(&$implementations, $hook){
  if( $hook == 'library_alter' ){
    $group = $implementations ['your_module'];
    unset($implementations ['your_module']);
    $implementations ['your_module'] = $group;
  }
}

/**
 * Implements hook_library_alter().
 */
function your_module_library_alter(&$javascript, $module) {
  if( $module === 'system' && current_path() == 'path/to/page' ) {
    // Make sure we inject either the minified or uncompressed version as desired.
    $min = variable_get('jquery_update_compression_type', 'min') == 'none' ? '' : '.min';
    $cdn = variable_get('jquery_update_jquery_cdn', 'none');
    $path = drupal_get_path('module', 'jquery_update');

    $version = '1.7';

    jquery_update_jquery_replace($javascript, $cdn, $path, $min, $version);
  }
}
?>

Drupal 6

Giải pháp của tôi là thay đổi JQUERY_UPDATE_REPLACE_PATHhằng số trước khi jquery_updatetải nó:

<?php
/**
 * Replace jQuery files on specified paths (fix for IE 6&7 - jQuery bug: bugs.jquery.com/ticket/6498)
 */
// if (array_search($_GET['q'], array('my_page')) !== FALSE) {
if (arg(0) == 'node' && arg(1) == '123') {
  define('JQUERY_UPDATE_REPLACE_PATH', 'sites/all/libraries/jquery/1.5.2');
}
?>

Vì vậy, nó có thể được thêm vào ngay từ đầu của tệp .module (được tải trước đó jquery_updatehoặc thử trong tệp cài đặt.


Không chiếm đoạt câu trả lời của bạn, nhưng có lẽ bạn cũng muốn thêm vari D8 của nó?
Pierre.Vriens

Tôi đã không chơi 8 quá nhiều, vì vậy tôi không chắc điều gì sẽ là giải pháp cho D8, xin lỗi về điều đó. Hãy đề nghị chỉnh sửa, hoặc gửi câu trả lời. Hoặc có thể đáng để tạo một câu hỏi khác cho D8 một cách cụ thể.
kenorb
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.