it-swarm-ko.tech

특정 컨텐츠 유형에 JavaScript 추가

콘텐츠 유형을 기준으로 특정 페이지에 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();

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

9
arkchong

적절한 Drupal 7에 해당하지만, Drupal 6 개 사이트)에 대해서는 template_preprocess_page 에 대해 언급 할 수 없습니다.

(arg() 또는 page_manager_get_current_page()을 기반으로) 결정을 내리고 $vars["scripts"] 외부 스크립트와 함께. 로컬 스크립트에서 종속성 문제가 발생하지 않도록 미리 추가합니다.

또한 때때로 $global_scripts for CDN에서로드하려는 Google API 및 SWFObject와 같은 것으로 생각되며 $scripts 페이지 템플릿에서.

솔직히 말하지만, 일반적으로 모든 페이지에 모든 JS가 있으므로 파일이 캐시됩니다.

6
mpdonadio

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를 사용했습니다. 실제로 자바 스크립트 파일을 참조하면 자동으로 캐시됩니다 ( 매개 변수 섹션 참조 ).

6
Jukebox

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

OR

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

2
Jeremy French

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

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

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

0
Nevos