Включаючи іншу версію jQuery лише на певній сторінці


16

Модуль оновлення jQuery включає цей скрипт.

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

Мені це потрібно на кожній сторінці, за винятком певного шаблону, який я використовую фантазійне поле, і мені потрібна пізніша версія jQuery.

Мені потрібно виключити оновлення jQuery від розміщення вищезазначеного сценарію в $scriptsзмінній ТІЛЬКИ на сторінці-media-photos.tpl.php. Як я можу цього досягти?

Відповіді:


10

Ось ваші варіанти:

  • Використовуйте jQuery Multi , як згадується в іншій відповіді. Він може бути налаштований для завантаження вищої версії jQuery саме на цій сторінці та лише для фантазійного вікна. Це не заважатиме jQuery Drupal або jQuery jquery_update.
  • У Drupal 7 ви можете використовувати kuk_js_alter () , що дозволить вам замінити версію jquery_update на все, що завгодно.
  • У Drupal 6 з оновленням jQuery він забезпечує гачок, що дозволяє вам змінювати JS після того, як це зроблено, роблячи свою справу. Ви можете подивитися на jQuery Multi 6.x код, щоб побачити, як він використовує цей гачок .
  • У Drupal 6 без оновлення jQuery ви можете це зробити, використовуючи гачок prepcess_page. $scriptsМінлива буде доступна там, і ви можете змінити його. Це може вийти трохи складніше. Ви також можете побачити, як це робить qmulti . jQuery Update також робить це аналогічно.

Пам’ятайте, що заміна на більш високу версію jQuery може порушити деякі речі в ядрі Drupal і внести внесок, що і вирішує проблему jQuery Multi. Тож якщо ви це зробите, переконайтеся, що нічого не порушите. Перевага тут полягає в тому, що ви просто завантажуєте потрібний вам jQuery, тоді як за допомогою jQuery Multi ви завантажите обидва.


Зауважте, moka_js_alter недоступний у D6
Девід Томас

2
Змінено відповідь, щоб мати інформацію про D6.
goron

Я погоджуюся з використанням jQuery multi, якщо ви хочете запустити кілька версій jQuery. Я рекомендую лише оновити jquery, якщо ви хочете запустити нову версію для всього свого сайту. Також, на мій досвід, оновлення jquery для jquery 1.7 та 1.8 все ще залишається помилковим для використання у виробництві.
rooby

3

Існує модуль jQuery multi . Цей модуль дозволяє вам мати multiple versions of jQuery run parallelв своєму екземплярі drupal. Він надає aliasдля кожного примірника, який ви можете використовувати для виклику цієї версії jquery.


3

Якщо у вас є проблеми з jqueryupdate та переглядають сторінки адміністрування (наприклад), спробуйте встановити Dev версію ctools, і все буде добре, я просто перевірив себе.


3

Будь ласка, знайдіть цей код може бути корисним. Розмістіть цей код у вашому template.php

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 дайте шлях js для ex: сайтів / всіх / модулів / og / og.js


функція phpredplate_preprocess_page (& $ vars) {$ scriptpts = drupal_add_js (); if (in_array ('page-media-photos', $ vars ['template_files'])) скасувати ($ scriptpts ['all'] ['module'] ['/ sites / all / module / jquery_update / substitute / jquery. min.js ']); $ vars ['scriptpts]] = drupal_get_js (' заголовок ', $ script); } це, здавалося, не спрацювало
альбо

Я upvoted , але він не працює
Альбо

Я оновив код, щоб вказати, що вам потрібно замінити MYTHEME на ім’я теми, а не використовувати "phpredplate". Крім того, я б не рекомендував використовувати такий тип підходу для видалення бібліотеки, від якої залежить інший js, наприклад jQuery, оскільки це не враховує порядок завантаження js, і ви могли б закінчитись jquery невизначеними помилками, якщо інше Плагіни jQuery завантажуються перед версією jQuery. Також спосіб оновлення jQuery є складнішим, ніж просто встановлення js-файлу.
рубін

2

Drupal 7

Ви можете зателефонувати jquery_update_jquery_replace()на конкретну сторінку (наприклад, на неї hook_library_alter()), як тут демонструє 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);
  }
}
?>

Друпал 6

Моє рішення було змінити JQUERY_UPDATE_REPLACE_PATHконстанту перед jquery_updateзавантаженням:

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

Тож його можна додати або на самому початку .module-файла (який завантажується раніше jquery_update, або спробувати у файлі налаштувань.


Щоб не викрасти свою відповідь, але, можливо, ви також хочете додати її варіант D8?
Pierre.Vriens

Я не грав надто 8, тому не знаю, що було б рішенням для D8, вибачте за це. Не соромтеся запропонувати редагувати або опублікувати відповідь. Або, можливо, варто створити ще одне питання для D8.
kenorb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.