web-dev-qa-db-ja.com

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

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

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

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

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

16
albo

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

  • 別の回答で述べたように、 jQuery Multi を使用します。 jQueryのより高いバージョンをそのページ上に、そして装飾ボックスのためだけにロードするように構成できます。 DrupalのjQueryやjquery_updateのjQueryには影響しません。
  • Drupal 7では、 hook_js_alter() を使用できます。これにより、jquery_updateのバージョンを必要なものと交換できます。
  • Drupal 6with jQuery Updateでは、 aフック を提供して、 jSの処理が完了したら、jQuery Multi 6.xコードを見て、 このフックの使用方法 を確認します。
  • Drupal 6jQuery Updateなし)では、preprocess_pageフックを使用してこれを実行できます。$scripts変数ここで利用可能になり、変更できます。これは少しトリッキーになる場合があります。 qmultiがこれを行う方法 も確認できます。jQueryUpdateも同様の方法でこれを行います。

より高いjQueryバージョンにスワップすると、Drupal coreおよびcontribの一部が壊れる可能性があります。これはjQuery Multiが解決する問題です。そのため、これを行う場合は何も壊していないことを確認してください。ここでの利点は、必要なjQueryをロードするだけであり、jQuery Multiでは両方をロードすることです。

10
goron

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

3
Gokul N K

Jqueryupdateやビューの管理ページ(たとえば)で問題が発生した場合は、ctoolsのDevバージョンをインストールしてみてください。

3
Molfar

このコードが役立つかもしれないので、このコードを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

3
Ramesh Babu T B

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の前に読み込まれる)の先頭に追加するか、設定ファイルで試すことができます。

2
kenorb