รวมถึงรุ่น jQuery ที่แตกต่างกันเฉพาะในหน้าเฉพาะ


16

โมดูลอัพเดต jQuery รวมถึงสคริปต์นี้

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

ฉันต้องการสิ่งนี้ในทุก ๆ หน้ายกเว้นไฟล์เทมเพลตบางตัวที่ฉันใช้กล่องแฟนซีและต้องการ jQuery รุ่นที่ใหม่กว่า

ฉันจำเป็นต้องแยกการอัปเดต jQuery ออกจากการวางสคริปต์ด้านบนใน$scriptsตัวแปรเฉพาะบน page-media-photos.tpl.php ฉันจะบรรลุสิ่งนี้ได้อย่างไร

คำตอบ:


10

นี่คือตัวเลือกของคุณ:

  • ใช้jQuery Multiตามที่กล่าวไว้ในคำตอบอื่น มันสามารถกำหนดค่าให้โหลด jQuery เวอร์ชันที่สูงกว่าในหน้านั้นและเฉพาะสำหรับกล่องแฟนซี จะไม่รบกวน jQuery ของ Drupal หรือ jQuery_update's jQuery
  • ใน Drupal 7 คุณสามารถใช้hook_js_alter ()ซึ่งจะช่วยให้คุณสามารถสลับเวอร์ชั่น jquery_update กับสิ่งที่คุณต้องการ
  • ใน Drupal 6 พร้อม jQuery Updateมีตะขอที่ให้คุณปรับเปลี่ยน JS หลังจากที่ทำสิ่งนั้นเสร็จแล้ว คุณสามารถดูรหัส jQuery Multi 6.x เพื่อดูวิธีการใช้เบ็ดนี้
  • ใน Drupal 6 ที่ไม่มี jQuery Updateคุณสามารถทำได้โดยใช้ preprocess_page hook $scriptsตัวแปรจะสามารถใช้ได้มีและคุณสามารถเปลี่ยนได้ นี่อาจเป็นเรื่องยุ่งยาก คุณสามารถดูว่า qmulti ทำสิ่งนี้ได้อย่างไร jQuery Update ทำสิ่งนี้ในลักษณะเดียวกัน

โปรดจำไว้ว่าการสลับไปใช้ jQuery เวอร์ชันที่สูงกว่านั้นสามารถทำลายบางสิ่งใน Drupal core และ contrib ซึ่งเป็นปัญหาที่ jQuery Multi แก้ได้ ดังนั้นถ้าคุณทำสิ่งนี้ให้แน่ใจว่าคุณไม่ได้ทำอะไรเลย ประโยชน์ที่นี่คือคุณโหลด jQuery ที่คุณต้องการในขณะที่ jQuery Multi คุณจะโหลดทั้งสองอย่าง


หมายเหตุ hook_js_alter ไม่สามารถใช้ได้ใน D6
David Thomas

2
เปลี่ยนคำตอบเพื่อให้มีข้อมูล D6 เช่นกัน
goron

ฉันเห็นด้วยกับการใช้ jQuery multi หากคุณต้องการรัน jQuery หลายเวอร์ชัน ฉันจะแนะนำ jquery update เท่านั้นหากคุณต้องการเรียกใช้เวอร์ชั่นใหม่สำหรับเว็บไซต์ทั้งหมดของคุณ นอกจากนี้จากประสบการณ์ของฉันการอัพเดต jquery สำหรับ jquery 1.7 และ 1.8 ยังคงเป็นรถที่ใช้ในการผลิต
rooby

3

มีโมดูลjQuery หลาย โมดูลนี้ช่วยให้คุณมีmultiple versions of jQuery run parallelในอินสแตนซ์ drupal ของคุณ มันให้aliasสำหรับแต่ละอินสแตนซ์ที่คุณสามารถใช้สำหรับการเรียก jquery รุ่นนั้น


3

หากคุณมีปัญหากับ jqueryupdate และดูหน้าผู้ดูแลระบบ (ตัวอย่าง) ลองติดตั้ง ctools เวอร์ชัน Dev และทุกอย่างจะโอเคแค่ทดสอบตัวเอง


3

กรุณาหารหัสนี้อาจเป็นประโยชน์วางรหัสนี้ในแม่แบบของคุณ

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 สำหรับ ex: sites / all / modules / og / og.js


ฟังก์ชัน phptemplate_preprocess_page (& $ vars) {$ สคริปต์ = drupal_add_js (); หาก (in_array ('page-media-photos', $ vars ['template_files'])) unset ($ สคริปต์ ['ทั้งหมด'] ['โมดูล'] ['/ ไซต์ / ทั้งหมด / modules / jquery_update / แทนที่ / jquery min.js']); $ vars ['สคริปต์'] = drupal_get_js ('header', $ script); } สิ่งนี้ดูเหมือนจะไม่ทำงาน
albo

ฉัน upvoted แต่มันไม่ทำงาน
Albo

ฉันอัปเดตรหัสเพื่อระบุว่าคุณต้องแทนที่ MYTHEME ด้วยชื่อธีมของคุณแทนที่จะใช้ "phptemplate" นอกจากนี้ฉันไม่แนะนำให้ใช้วิธีการนี้ในการลบไลบรารีที่ js อื่นขึ้นอยู่กับเช่น jQuery เพราะไม่คำนึงถึงลำดับที่โหลด js และคุณสามารถจบด้วย jquery เป็นข้อผิดพลาดที่ไม่ได้กำหนดถ้าอื่น ๆ ปลั๊กอิน jQuery ถูกโหลดก่อนเวอร์ชันของ jQuery นอกจากนี้วิธีการทำงานของการอัพเดต jQuery นั้นซับซ้อนกว่าการยกเลิกการตั้งค่าไฟล์ js
rooby

2

Drupal 7

คุณสามารถโทรหาjquery_update_jquery_replace()หน้าใดหน้าหนึ่ง (เช่นในhook_library_alter()) ตามที่แสดงในที่นี้โดย 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

โซลูชันของฉันคือเปลี่ยน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');
}
?>

ดังนั้นจึงสามารถเพิ่มได้ที่จุดเริ่มต้นของไฟล์. โมดูล (ซึ่งโหลดมาก่อนjquery_updateหรือลองในไฟล์การตั้งค่า


ไม่จี้คำตอบของคุณ แต่บางทีคุณอาจต้องการเพิ่ม D8 รูปแบบของมันด้วย?
Pierre.Vriens

ฉันไม่ได้เล่น 8 มากเกินไปดังนั้นฉันจึงไม่แน่ใจว่าอะไรจะเป็นคำตอบสำหรับ D8 ขอโทษด้วย อย่าลังเลที่จะแนะนำการแก้ไขหรือโพสต์คำตอบ หรืออาจเป็นการสร้างคำถามอื่นให้กับ D8 โดยเฉพาะ
kenorb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.