केवल विशिष्ट पृष्ठ पर एक अलग jQuery संस्करण शामिल है


16

jQuery अपडेट मॉड्यूल इस स्क्रिप्ट सहित है।

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

मुझे हर पृष्ठ पर इसकी आवश्यकता है, एक निश्चित टेम्प्लेट फ़ाइल को छोड़कर, जिसे मैं फैंसी बॉक्स का उपयोग कर रहा हूं, और jQuery के बाद के संस्करण की आवश्यकता है।

मुझे उपरोक्त स्क्रिप्ट को $scriptsकेवल पृष्ठ-मीडिया- photos.tpl.php पर चर में डालने से jQuery अद्यतन को बाहर करने की आवश्यकता है । इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


10

यहाँ आपके विकल्प हैं:

  • एक अन्य उत्तर में उल्लिखित jQuery मल्टी का उपयोग करें । इसे उस पेज पर और सिर्फ फैंसी बॉक्स के लिए jQuery के उच्च संस्करण को लोड करने के लिए कॉन्फ़िगर किया जा सकता है। यह Drupal के jQuery के साथ या jquery_update के jQuery के साथ हस्तक्षेप नहीं करेगा।
  • Drupal 7 में, आप hook_js_alter () का उपयोग कर सकते हैं , जो आपको jquery_update के संस्करण को स्वैप करने देगा जो आप चाहते हैं।
  • जेपीयू अपडेट के साथ ड्रुपल 6 में , यह एक हुक प्रदान करता है जो आपको जेएस को बदलने की अनुमति देता है क्योंकि यह अपनी बात कर रहा है। आप jQuery मल्टी 6.x कोड को देखने के लिए देख सकते हैं कि यह इस हुक का उपयोग कैसे करता है
  • JQuery के अपडेट के बिना Drupal 6 में , आप एक preprocess_page हुक का उपयोग करके ऐसा कर सकते हैं। $scriptsचर वहाँ उपलब्ध हो जाएगा, और आप इसे बदल सकते हैं। यह थोड़ा मुश्किल हो सकता है। आप यह भी देख सकते हैं कि क्यूमल्टी ऐसा कैसे करती है । jQuery का अपडेट भी इसी तरह से करता है।

याद रखें कि उच्च jQuery संस्करण में स्वैप करने से Drupal core और contrib में कुछ चीजें टूट सकती हैं, जो कि समस्या jQuery मल्टी सॉल्व है। यदि आप ऐसा करते हैं तो सुनिश्चित करें कि आप कुछ भी नहीं तोड़ रहे हैं। यहाँ लाभ यह है कि आप सिर्फ उस jQuery को लोड करते हैं जिसकी आपको आवश्यकता है, जबकि jQuery मल्टी के साथ आप दोनों को लोड करेंगे।


ध्यान दें, hook_js_alter D6 में उपलब्ध नहीं है
डेविड थॉमस

2
D6 की जानकारी के साथ ही इसका उत्तर भी बदल दिया।
गोरोन

यदि आप jQuery के कई संस्करणों को चलाना चाहते हैं तो मैं jQuery मल्टी का उपयोग करने से सहमत हूं। यदि आप अपनी पूरी साइट के लिए नया संस्करण चलाना चाहते हैं तो मैं केवल jquery अपडेट की सिफारिश करूंगा। इसके अलावा, मेरे अनुभव में, jquery 1.7 और 1.8 के लिए jquery अपडेट अभी भी उत्पादन में उपयोग करने के लिए छोटी है।
रॉबी

3

एक मॉड्यूल jQuery मल्टी है । यह मॉड्यूल आपको multiple versions of jQuery run parallelअपने ड्रुपल उदाहरण पर रखने की अनुमति देता है । यह aliasप्रत्येक उदाहरण के लिए प्रदान करता है जिसे आप jquery के उस संस्करण को कॉल करने के लिए उपयोग कर सकते हैं।


3

यदि आपको jqueryupdate से परेशानी है और व्यवस्थापक पृष्ठ (उदाहरण के लिए) 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 का पथ देता है: साइटें / सभी / मॉड्यूल / og / og.js


function phptemplate_preprocess_page (& $ var) {$ स्क्रिप्ट्स = drupal_add_js (); if (in_array ('पेज-मीडिया-फोटोज', $ var ['template_files'])) unset ($ स्क्रिप्ट्स ['all'] ['मॉड्यूल'] [’/ साइट्स / सभी / मॉड्यूल / jquery_update / प्रतिस्थापित / jquery। min.js ']); $ var ['स्क्रिप्ट'] = drupal_get_js ('हेडर', $ स्क्रिप्ट); } यह काम करने के लिए प्रतीत नहीं हुआ
अल्ब

मैं उखड़ गया, लेकिन यह काम नहीं करता
एल्बो

मैंने यह संकेत देने के लिए कोड अपडेट किया कि आपको "phptemplate" का उपयोग करने के बजाय अपने विषय के नाम के साथ MYTHEME को बदलना होगा। इसके अलावा, मैं एक पुस्तकालय को हटाने के लिए इस प्रकार के दृष्टिकोण का उपयोग करने की अनुशंसा नहीं करूंगा जो कि अन्य js पर निर्भर करता है, जैसे jQuery, क्योंकि यह उस आदेश को ध्यान में नहीं रखता है जो js लोड है और आप jquery के साथ समाप्त हो सकते हैं अपरिभाषित त्रुटियां हैं यदि अन्य jQuery प्लग इन को jQuery के एक संस्करण से पहले लोड किया जाता है। इसके अलावा, जिस तरह से jQuery का अपडेट काम करता है, वह सिर्फ js फ़ाइल को अनसेट करने से अधिक जटिल है।
रॉबी

2

द्रुपाल al

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

द्रुपाल ६

मेरा समाधान लोड करने 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, या सेटिंग फ़ाइल में प्रयास करें।


अपने उत्तर को हाइजैक करने के लिए नहीं, लेकिन शायद आप इसका डी 8 संस्करण भी जोड़ना चाहते हैं?
पियरे.व्रींस

मैंने 8 बहुत ज्यादा नहीं खेला, इसलिए मुझे यकीन नहीं है कि डी 8 के लिए क्या समाधान होगा, इसके बारे में क्षमा करें। बेझिझक संपादित करें, या एक उत्तर पोस्ट करने का सुझाव दें। या यह विशेष रूप से D8 के लिए एक और प्रश्न बनाने के लायक हो सकता है।
केनोरब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.