Добавить 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();

Есть ли другой лучший способ? по возможности могу привести какой-то пример, в настоящее время не очень хорошо понимаю ...

arkchong
источник

Ответы:

6

Я не могу комментировать правильный эквивалент Drupal 7, но на сайтах Drupal 6 я делаю это на template_preprocess_page .

У меня будет некоторая логика, чтобы принять решение (на основе arg()или page_manager_get_current_page()из панелей), а затем $vars["scripts"]подготовить внешний сценарий. Я готовлюсь к тому, чтобы не сталкиваться с проблемами зависимости ни с какими локальными сценариями.

Я также иногда настраиваю новый регион, $global_scriptsтребующий таких идей, как Google API и SWFObject, который я хочу загрузить из CDN, и это будет напечатано ранее $scriptsв шаблоне страницы.

Если честно, хотя у меня обычно все JS на всех страницах, так что файлы кэшируются.

mpdonadio
источник
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потому, что легче добраться до типа узла. Если вы действительно ссылаетесь на файл javascript, то он будет автоматически кэширован ( см. Раздел «Параметры» ).

проигрыватель-автомат
источник
2

Вы также можете использовать проверку hook_node_view для типа контента, а затем добавить js, как вы уже делаете.

ИЛИ

Если у вас есть поле для вывода информации, которая будет использовать JS, используйте там препроцессор для добавления js, поэтому включение js зависит от поля отображения карты, а не от типа контента.

Джереми Френч
источник
0

Простое решение - просто разместить add_js:

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

в странице / узле template.php.

Nevos
источник