特定のページにのみ異なるjQueryバージョンを含める


16

jQuery更新モジュールにはこのスクリプトが含まれています。

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

ファンシーボックスを使用している特定のテンプレートファイルを除くすべてのページでこれが必要であり、jQueryの新しいバージョンが必要です。

$scriptspage-media-photos.tpl.phpの変数のみに上記のスクリプトを置くことからjQuery更新を除外する必要があります。どうすればこれを達成できますか?

回答:


10

オプションは次のとおりです。

  • 別の回答で述べたように、jQuery Multiを使用します。jQueryの上位バージョンをそのページだけで空想的なボックスにロードするように構成できます。DrupalのjQueryやjquery_updateのjQueryを妨げることはありません。
  • Drupal 7では、hook_js_alter()を使用できます。これにより、jquery_updateのバージョンを必要なものと交換できます。
  • jQuery Updateを備えた Drupal 6 ではその処理が完了した後にJSを変更できるフックを提供します。jQuery Multi 6.xコードを見て、このフックの使用方法を確認できます。
  • jQuery Updateのない Drupal 6 では、preprocess_pageフックを使用してこれを行うことができます。ここで$scripts変数が使用可能になり、変更できます。これには少し注意が必要です。qmultiがこれどのように行うかを確認することもできます。jQuery Updateも同様の方法でこれを行います。

jQuery Multiが解決する問題である、より高いjQueryバージョンへのスワップは、Drupalコアとcontribのいくつかの問題を破壊する可能性があることを忘れないでください。したがって、これを行う場合は、何も壊していないことを確認してください。ここでの利点は、必要なjQueryをロードするだけで、jQuery Multiを使用すると両方をロードできることです。


注意、hook_js_alterはD6では利用できません
デビッドトーマス

2
D6情報も含むように回答を変更しました。
ゴロン

jQueryの複数のバージョンを実行する場合は、jQuery multiを使用することに同意します。サイト全体で新しいバージョンを実行する場合にのみ、jquery updateをお勧めします。また、私の経験では、jquery 1.7および1.8のjquery更新は、本番環境で使用するにはまだバグがあります。
ルービー

3

モジュールjQuery multiがあります。このモジュールを使用するとmultiple versions of jQuery run parallel、drupalインスタンスを使用できます。aliasjqueryのそのバージョンを呼び出すために使用できるインスタンスごとにを提供します。


3

jqueryupdateで問題が発生し、管理ページを表示する場合(たとえば)、ctoolsのDevバージョンをインストールしてみてください。すべて自分でテストします。


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は、exのjsのパスを示します。sites/ all / modules / og / og.js


関数phptemplate_preprocess_page(&$ vars){$ scripts = drupal_add_js(); if(in_array( 'page-media-photos'、$ vars ['template_files']))unset($ scripts ['all'] ['module'] ['/ sites / all / modules / jquery_update / replace / jquery。 min.js ']); $ vars ['scripts'] = drupal_get_js( 'header'、$ scripts); }これは動作していないようでした
ALBO

私はupvotedが、それは仕事をしません
ALBO

「phptemplate」を使用する代わりに、MYTHEMEをテーマ名に置き換える必要があることを示すためにコードを更新しました。また、このタイプのアプローチを使用して、jQueryのように他のjsが依存するライブラリーを削除することはお勧めしません。 jQueryプラグインは、jQueryのバージョンの前にロードされます。また、jQuery更新の動作方法は、jsファイルを単に設定解除するよりも複雑です。
ルービー

2

Drupal 7

drupalmoffここに示すようにjquery_update_jquery_replace()、特定のページ(例:)で呼び出すことができます。hook_library_alter()

<?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

私の解決策は、ロードする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に関する別の質問を作成する価値があります。
ケノーブ16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.