특정 컨텐츠 유형에 JavaScript 추가


9

콘텐츠 유형을 기준으로 특정 페이지에 JavaScript 파일을 추가하는 가장 좋은 방법이 무엇인지 알고 싶습니다. 예를 들어, 이것을 추가하고 싶습니다 :

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

지금까지 내가 한 일은이 방법을 사용하여 내 특정 콘텐츠 유형에 추가하는 것입니다. map_page 콘텐츠 유형의 경우, 아래 두 줄의 코드 인 map_page.tpl.php를 추가합니다.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

더 좋은 방법이 있습니까? 가능하다면 몇 가지 예를들 수 있지만 현재 실제로 잘 이해하지 못하고 있습니다 ...

답변:


6

적절한 Drupal 7에 대해서는 언급 할 수 없지만 Drupal 6 사이트에서는 template_preprocess_page 에서이 작업을 수행합니다 .

패널을 기반으로 arg()하거나 page_manager_get_current_page()패널에서 결정을 내린 다음 $vars["scripts"]외부 스크립트 앞에 추가 하는 논리가 있습니다 . 로컬 스크립트에서 종속성 문제가 발생하지 않도록 미리 추가합니다.

$global_scriptsCDN에서로드하려는 Google API 및 SWFObject와 같은 생각을위한 새로운 영역을 설정하는 경우도 있습니다 $scripts. 그러면 페이지 템플리트에서 이전 에 인쇄됩니다 .

솔직히 말해서, 일반적으로 파일이 캐시되도록 모든 페이지에 모든 JS가 있습니다.


6

Drupal은 template_preprocess_node(node.module에 이미 정의되어 있기 때문에) 재정의 할 수 없으므로 사용자 정의 모듈에 전 처리기 기능을 추가했습니다.

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

노드 유형에 쉽게 도달하기 preprocess_node보다는 오히려 사용 preprocess_page했습니다. 실제로 자바 스크립트 파일을 참조하면 자동으로 캐시됩니다 ( 매개 변수 섹션 참조 ).


2

컨텐츠 유형에 대해 hook_node_view check를 사용한 다음 이미 수행중인 방식으로 j를 추가 할 수도 있습니다.

또는

JS를 사용할 정보를 출력하는 필드가있는 경우, 프리 프로세서를 사용하여 j를 추가하므로 js include는 컨텐츠 유형이 아닌 맵을 표시하는 필드에 따라 다릅니다.


0

간단한 해결책은 add_js를 배치하는 것입니다.

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

페이지 / 노드 template.php에서.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.