Termasuk versi jQuery yang berbeda hanya pada halaman tertentu

16

Modul pembaruan jQuery termasuk skrip ini.

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

Saya memerlukan ini di setiap halaman, kecuali file templat tertentu yang saya gunakan kotak mewah, dan memerlukan versi jQuery yang lebih baru.

Saya perlu mengecualikan pembaruan jQuery dari menempatkan skrip di atas dalam $scriptsvariabel SAJA di halaman-media-photos.tpl.php. Bagaimana saya bisa mencapai ini?

albo
sumber

Jawaban:

10

Ini pilihanmu:

  • Gunakan jQuery Multi , sebagaimana disebutkan dalam jawaban lain. Ini dapat dikonfigurasi untuk memuat versi jQuery yang lebih tinggi hanya pada halaman itu dan hanya untuk kotak mewah. Itu tidak akan mengganggu jQuery Drupal atau jQuery jquery_update.
  • Di Drupal 7, Anda dapat menggunakan hook_js_alter () , yang memungkinkan Anda menukar versi jquery_update dengan apa pun yang Anda inginkan.
  • Dalam Drupal 6 dengan Pembaruan jQuery , ia menyediakan hook yang memungkinkan Anda mengubah JS setelah selesai melakukan hal tersebut. Anda dapat melihat kode jQuery Multi 6.x untuk melihat bagaimana ia menggunakan hook ini .
  • Di Drupal 6 tanpa Pembaruan jQuery , Anda bisa melakukan ini menggunakan kait preprocess_page. The $scriptsvariabel akan tersedia di sana, dan Anda dapat mengubahnya. Ini bisa sedikit rumit. Anda juga dapat melihat bagaimana qmulti melakukan ini . Pembaruan jQuery juga melakukan ini dengan cara yang sama.

Ingat bahwa bertukar ke versi jQuery yang lebih tinggi dapat merusak beberapa hal di Drupal core dan contrib, yang merupakan masalah jQuery Multi yang dipecahkan. Jadi, jika Anda melakukan ini, pastikan Anda tidak merusak apa pun. Manfaatnya di sini adalah Anda hanya memuat jQuery yang Anda butuhkan, sedangkan dengan jQuery Multi Anda akan memuat keduanya.

goron
sumber
Catatan, hook_js_alter tidak tersedia di D6
David Thomas
2
Mengubah jawaban untuk memiliki info D6 juga.
goron
Saya setuju dengan menggunakan jQuery multi jika Anda ingin menjalankan beberapa versi jQuery. Saya hanya akan merekomendasikan pembaruan jquery jika Anda ingin menjalankan versi yang lebih baru untuk seluruh situs Anda. Juga, dalam pengalaman saya, pembaruan jquery untuk jquery 1.7 & 1.8 masih sulit untuk digunakan dalam produksi.
rooby
3

Ada modul jQuery multi . Modul ini memungkinkan Anda untuk memiliki multiple versions of jQuery run parallelcontoh drupal Anda. Ini menyediakan aliasuntuk setiap instance yang dapat Anda gunakan untuk memanggil versi jquery itu.

Gokul NK
sumber
3

Jika Anda memiliki masalah dengan jqueryupdate dan melihat halaman admin (misalnya) cobalah untuk menginstal ctools versi Dev dan semuanya akan beres, cukup uji sendiri.

Molfar
sumber
3

Silakan temukan kode ini dapat membantu, Tempatkan kode ini di template.php Anda

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 memberikan jalur js untuk contoh: situs / semua / modul / og / og.js

Ramesh Babu TB
sumber
function phptemplate_preprocess_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ('halaman-media-foto', $ vars ['template_files']))) tidak disetel ($ skrip ['semua'] ['modul'] ['/ situs / semua / modul / jquery_update / replace / jquery. min.js ']); $ vars ['scripts'] = drupal_get_js ('header', $ script); } ini sepertinya tidak berhasil
albo
Saya terbalik tetapi tidak berhasil
albo
Saya memperbarui kode untuk menunjukkan bahwa Anda perlu mengganti MYTHEME dengan nama tema Anda alih-alih menggunakan "phptemplate". Juga, saya tidak akan merekomendasikan menggunakan jenis pendekatan ini untuk menghapus perpustakaan yang bergantung pada js lain, seperti jQuery, karena ini tidak memperhitungkan urutan bahwa js dimuat dan Anda dapat berakhir dengan jquery adalah kesalahan yang tidak ditentukan jika lainnya Plugin jQuery dimuat sebelum versi jQuery. Selain itu, cara pembaruan jQuery bekerja lebih kompleks dari sekadar tidak mengonfigurasi file js.
rooby
2

Drupal 7

Anda dapat memanggil jquery_update_jquery_replace()halaman tertentu (misalnya dalam hook_library_alter()) seperti yang ditunjukkan di sini oleh 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

Solusi saya adalah mengubah JQUERY_UPDATE_REPLACE_PATHkonstanta sebelum jquery_updatememuatnya:

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

Jadi itu dapat ditambahkan di awal file .module (yang dimuat sebelumnya jquery_update, atau coba di file pengaturan.

kenorb
sumber
Bukan untuk membajak jawaban Anda, tetapi mungkin Anda juga ingin menambahkan varian D8 itu?
Pierre.Vriens
Saya tidak bermain 8 terlalu banyak, jadi saya tidak yakin apa yang akan menjadi solusi untuk D8, maaf soal itu. Jangan ragu untuk menyarankan edit, atau kirim jawaban. Atau mungkin layak untuk membuat pertanyaan lain untuk D8 secara khusus.
kenorb