Добавить 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 10 Maypm11 2011, 21:48:04

4 ответа


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 10 Maypm11 2011, 22:53:40
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, то он будет автоматически кэшироваться ( см. раздел« Параметры ».)

ответил Jukebox 27 AM000000100000002731 2011, 10:33:27
2

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

ИЛИ

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

ответил Jeremy French 11 Maypm11 2011, 17:06:41
0

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

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

в странице /node template.php.

ответил Nevos 30 Mayam12 2012, 11:52:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132