Yalnızca belirli bir sayfaya farklı bir jQuery sürümü dahil etme


16

jQuery güncelleme modülü bu komut dosyasını içerir.

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

Ben fantezi kutu kullanıyorum belirli bir şablon dosyası dışında ve jQuery sonraki bir sürümü gereken her sayfada gerekir.

$scriptsSADECE page-media-photos.tpl.php değişkeninde yukarıdaki komut dosyası koyarak jQuery güncellemesini dışlamak gerekir . Bunu nasıl başarabilirim?

Yanıtlar:


10

Seçenekleriniz şunlardır:

  • Başka bir cevapta belirtildiği gibi jQuery Multi kullanın . JQuery'nin daha yüksek sürümünü sadece o sayfaya ve sadece süslü kutuya yüklemek için yapılandırılabilir. Drupal'ın jQuery'sine veya jquery_update'nin jQuery'sine müdahale etmez.
  • Drupal 7'de, jquery_update'nin sürümünü istediğiniz her şeyle değiştirmenize olanak tanıyan hook_js_alter () kullanabilirsiniz .
  • JQuery Update ile Drupal 6'da , işini yaptıktan sonra JS'yi değiştirmenizi sağlayan bir kanca sağlar. Bu kancayı nasıl kullandığını görmek için jQuery Multi 6.x koduna bakabilirsiniz .
  • JQuery Güncellemesi olmayan Drupal 6'da bunu bir önişlem_sayfası kancası kullanarak yapabilirsiniz. $scriptsDeğişken orada mevcut olacak ve bunu değiştirebilir. Bu biraz zor olabilir. Ayrıca qmulti'nin bunu nasıl yaptığını da görebilirsiniz . jQuery Update de bunu benzer şekilde yapar.

Daha yüksek bir jQuery sürümüyle değiştirmenin, Drupal çekirdeğindeki bazı şeyleri kırabileceğini ve jQuery Multi'nin çözdüğü sorun olan katkıda bulunabileceğini unutmayın. Yani bunu yaparsanız hiçbir şey kırmadığınızdan emin olun. Buradaki avantaj, ihtiyacınız olan jQuery'yi yüklemenizdir, jQuery Multi ile her ikisini de yüklersiniz.


Not, hook_js_alter D6'da mevcut değil
David Thomas

2
Cevabı D6 bilgisi olacak şekilde değiştirdi.
goron

JQuery'nin birden çok sürümünü çalıştırmak istiyorsanız jQuery multi kullanmayı kabul ediyorum. Jquery güncellemesini yalnızca tüm siteniz için yeni sürümü çalıştırmak istiyorsanız öneririm. Ayrıca, tecrübelerime göre, jquery 1.7 & 1.8 için jquery güncellemesi hala üretimde kullanmak için buggy.
rooby

3

JQuery multi modülü var . Bu modül, multiple versions of jQuery run paralleldrupal örneğinizde bulunmanıza izin verir . Bu aliasjquery sürümünü çağırmak için kullanabileceğiniz her örnek için bir sağlar .


3

Jqueryupdate ile ilgili sorunlarınız varsa ve yönetici sayfalarını görüntülerseniz (örneğin) ctools'un Dev sürümünü yüklemeyi deneyin ve her şey yoluna girecek, sadece kendimi test ettim.


3

Lütfen bu kodu yararlı bulabilir, Bu kodu template.php dosyasına yerleştirin

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 için: js yolunu verir: sites / all / modules / og / og.js


işlev phptemplate_preprocess_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ('sayfa-medya-fotoğraflar', $ vars ['template_files'])) unset ($ komut dosyaları ['all'] ['modül'] ['/ sites / all / modules / jquery_update / replace / jquery. min.js']); $ vars ['scripts'] = drupal_get_js ('başlık', $ komut dosyaları); } bu işe yaramadı
albo

Kaldırdım ama işe yaramıyor
albo

Kodu "phptemplate" yerine MYTHEME yerine tema adınızla değiştirmeniz gerektiğini belirtmek için güncelledim. Ayrıca, jQuery gibi diğer js bağımlı bir kütüphaneyi kaldırmak için bu tür bir yaklaşım kullanmanızı tavsiye etmem, çünkü bu js yüklenme sırasını dikkate almaz ve eğer jquery ile bitirebilirsiniz tanımsız hata ise diğer jQuery eklentileri, jQuery'nin bir sürümünden önce yüklenir. Ayrıca, jQuery güncellemesinin çalışma şekli, bir js dosyasının ayarının kaldırılmasından daha karmaşıktır.
rooby

2

Drupal 7

Sen diyebilirsin jquery_update_jquery_replace()(o örneğin belirli sayfasında hook_library_alter()gösterildiği gibi) drupalmoff burada :

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

Benim çözüm yük JQUERY_UPDATE_REPLACE_PATHönce sabit değiştirmek oldu 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');
}
?>

Böylece .module dosyasının en başında eklenebilir (daha önce yüklenir) jquery_updateveya ayarlar dosyasında deneyebilirsiniz.


Cevabınızı kaçırmamak için değil, belki de D8 değişkenini eklemek istersiniz?
Pierre.Vriens

8'i çok fazla oynamadım, bu yüzden D8 için çözümün ne olacağından emin değilim, bunun için üzgünüm. Düzenleme önermekten çekinmeyin veya bir yanıt gönderin. Veya özellikle D8 için başka bir soru oluşturmaya değer olabilir.
kenorb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.