특정 페이지에만 다른 jQuery 버전 포함


16

jQuery 업데이트 모듈에이 스크립트가 포함되어 있습니다.

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

멋진 상자를 사용하는 특정 템플릿 파일을 제외하고 모든 페이지에 이것이 필요하며 jQuery의 이후 버전이 필요합니다.

위의 스크립트 $scripts를 page-media-photos.tpl.php 의 변수에만 넣지 않도록 jQuery 업데이트를 제외해야합니다 . 어떻게하면 되나요?

답변:


10

옵션은 다음과 같습니다.

  • 다른 답변에서 언급했듯이 jQuery Multi를 사용하십시오 . 해당 페이지 및 고급 상자에만 더 높은 버전의 jQuery를로드하도록 구성 할 수 있습니다. Drupal의 jQuery 또는 jquery_update의 jQuery를 방해하지 않습니다.
  • Drupal 7에서 hook_js_alter ()를 사용 하면 jquery_update의 버전을 원하는대로 바꿀 수 있습니다.
  • jQuery Update가 포함 된 Drupal 6에서는 JS 작업이 완료된 후 JS를 변경할 수 있는 후크 를 제공 합니다 . jQuery Multi 6.x 코드 에서이 후크를 사용하는 방법 을 확인할 수 있습니다 .
  • jQuery Update가없는 Drupal 6에서는 preprocess_page 후크를 사용하여이를 수행 할 수 있습니다. $scripts변수가 사용할 수 있습니다, 당신은 그것을 변경할 수 있습니다. 조금 까다로울 수 있습니다. qmulti가 어떻게 하는지를 볼 수 있습니다 . jQuery Update도 비슷한 방식으로이 작업을 수행합니다.

더 높은 jQuery 버전으로 교체하면 Drupal 코어 및 contrib에서 일부 문제가 발생할 수 있으며 이는 jQuery Multi가 해결하는 문제입니다. 따라서이 작업을 수행하면 아무 것도 위반하지 않아야합니다. 여기서 장점은 필요한 jQuery 만로드하고 jQuery Multi를 사용하면 둘 다로드한다는 것입니다.


D6에서는 hook_js_alter를 사용할 수 없습니다.
David Thomas

2
D6 정보도 포함하도록 답변을 변경했습니다.
goron

여러 버전의 jQuery를 실행하려면 jQuery multi를 사용하는 데 동의합니다. 전체 사이트에 대해 최신 버전을 실행하려는 경우 jquery 업데이트 만 권장합니다. 또한 제 경험상 jquery 1.7 및 1.8의 jquery 업데이트는 여전히 프로덕션 환경에서 사용하기에 버그가 있습니다.
rooby

3

jQuery multi 모듈이 있습니다 . 이 모듈을 사용하면 multiple versions of jQuery run parallel드루팔 인스턴스 를 가질 수 있습니다 . alias해당 버전의 jquery를 호출하는 데 사용할 수있는 각 인스턴스에 대해를 제공합니다 .


3

jqueryupdate 및보기 관리 페이지에 문제가있는 경우 (예를 들어) ctools의 Dev 버전을 설치하려고하면 모든 것이 정상입니다.


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는 예를 들어 sites / all / modules / og / og.js에 대한 js 경로를 제공합니다.


함수 phptemplate_preprocess_page (& $ vars) {$ scripts = drupal_add_js (); if (in_array ( 'page-media-photos', $ vars [ 'template_files'])) unset ($ scripts [ 'all'] [ 'module'] [ '/ sites / all / modules / jquery_update / replace / jquery. min.js ']); $ vars [ 'scripts'] = drupal_get_js ( 'header', $ scripts); }이 작동하지 않는 것
albo

나는 upvoted하지만 작동하지 않습니다
albo

"phptemplate"을 사용하는 대신 MYTHEME을 테마 이름으로 바꿔야한다는 것을 나타 내기 위해 코드를 업데이트했습니다. 또한 jQuery와 같은 다른 js가 의존하는 라이브러리를 제거하기 위해이 유형의 접근 방식을 사용하지 않는 것이 좋습니다 .js 가로 드되는 순서를 고려하지 않기 때문에 다른 경우 jquery가 정의되지 않은 오류가 발생할 수 있기 때문입니다. jQuery 플러그인은 jQuery 버전보다 먼저로드됩니다. 또한 jQuery 업데이트 작동 방식은 js 파일을 설정 해제하는 것보다 더 복잡합니다.
rooby 2019

2

드루팔 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);
  }
}
?>

드루팔 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에 로드 되거나 설정 파일에서 시도하십시오).


답을 납치하지 말고 D8 variatn을 추가하고 싶습니까?
Pierre.Vriens

나는 8을 ​​너무 많이 연주하지 않았으므로 D8의 해결책이 무엇인지 잘 모르겠습니다. 죄송합니다. 편집을 제안하거나 답변을 게시하십시오. 또는 D8에 대한 또 다른 질문을 구체적으로 작성하는 것이 좋습니다.
kenorb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.