Dodaj JavaScript do określonego typu treści

9

Chciałbym wiedzieć, jaki jest najlepszy sposób dodania pliku JavaScript do określonej strony na podstawie typu zawartości. Na przykład chcę dodać to:

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

Do tej pory użyłem tego sposobu, aby dodać do mojego określonego typu treści. Dla typu zawartości map_page dodałem poniższy wiersz linii na stronie - map_page.tpl.php.

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

Czy jest jakiś lepszy sposób? jeśli to możliwe, można podać przykład, obecnie nie bardzo dobrze rozumiem ...

arkchong
źródło

Odpowiedzi:

6

Nie mogę komentować właściwego odpowiednika Drupala 7, ale w witrynach Drupal 6 robię to na stronie template_preprocess_page .

Będę miał trochę logiki, aby podjąć decyzję (na podstawie arg()lub page_manager_get_current_page()z paneli), a następnie dokończyć $vars["scripts"]z zewnętrznym skryptem. Przygotowuję się, aby nie napotkać problemów z zależnością od lokalnych skryptów.

Czasami też utworzę nowy region, $global_scriptsdo którego się odwołuje, takie jak Google API i SWFObject, które chcę załadować z CDN, a to jest drukowane wcześniej $scriptsw szablonie strony.

Szczerze mówiąc, chociaż zwykle mam wszystkie JS na wszystkich stronach, więc pliki są buforowane.

mpdonadio
źródło
6

Ponieważ Drupal nie pozwala ci przedefiniować template_preprocess_node(ponieważ jest już zdefiniowany w module node.module), dodałem funkcję preprocesora w moim module niestandardowym:

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

Użyłem preprocess_noderaczej niż preprocess_pagedlatego, że łatwiej jest dostać się do typu węzła. Jeśli faktycznie odwołujesz się do pliku javascript, zostanie on automatycznie buforowany ( patrz sekcja Parametry ).

Szafa grająca
źródło
2

możesz również użyć sprawdzenia hook_node_view dla typu zawartości, a następnie dodać js w sposób, w jaki już to robisz.

LUB

Jeśli masz pole, które wyprowadza informacje, które wykorzystają JS, użyj tam preprocesora, aby dodać js, więc włączenie js zależy od pola wyświetlającego mapę, a nie od typu zawartości.

Jeremy French
źródło
0

Prostym rozwiązaniem jest umieszczenie add_js:

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

w page / node template.php.

Nevos
źródło