Как добавить блок JavaScript только на домашнюю страницу?

8

У меня есть блок JavaScript, который мне нужно добавить на мою домашнюю страницу (и только на мою домашнюю страницу), чтобы включить регистрацию кликов через службу картирования, на которую я подписался.

Они указали код, который необходимо поместить непосредственно перед </body>тегом, но я думаю, что безопасно поместить его в любом месте <body>тега.

Мне бы хотелось, чтобы фрагмент не появлялся на других страницах. Как я могу сделать это?

Я использую Drupal 6.

PHLAK
источник

Ответы:

15

Если под домашней страницей вы подразумеваете первую страницу, то можете реализовать ее hook_preprocess_page()в пользовательском модуле.

function mymodule_preprocess_page(&$variables) {
  if ($variables['is_front']) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    $variables['scripts'] = drupal_get_js();
  }
}

Тот же код работает на Drupal 7, как $variables['is_front']установлено в _template_preprocess_default_variables () ( вызывается из template_preprocess () ), используя следующий код.

  // drupal_is_front_page() might throw an exception.
  try {
    $variables['is_front'] = drupal_is_front_page();
  }
  catch (Exception $e) {
    // If the database is not yet available, set default values for these
    // variables.
    $variables['is_front'] = FALSE;
    $variables['db_is_active'] = FALSE;
  }

Причина вызова drupal_add_js()сначала, а затем drupal_get_js()в том, что в случае, если другой модуль, который выполняется после этого, запустит следующий код, файл JavaScript все равно будет добавлен.

function quite_a_different_module_preprocess_page(&$vars) {
  drupal_add_js(drupal_get_path('module', 'quite_a_different_mymodule') . '/quite_a_different_module.js');
  $vars['scripts'] = drupal_get_js();
}

Используя drupal_add_js(), файл будет добавлен к выводу, возвращенному из drupal_get_js () .

киамлалуно
источник
Это выглядит хорошо, попробую.
PHLAK
Это хорошо работает для включения JS в заголовок, но есть ли способ поместить его в тело?
PHLAK
1
@PHLAK Чтобы поместить его в тело, вы просто добавляете <script>тег в тело HTML.
kiamlaluno
Я смог выполнить то, что мне было нужно, добавив блок контента в конец страницы и ограничив его показом только на <front>странице. Это решение также хорошо, но не для ситуации, в которой я находился. Спасибо.
PHLAK
6

Если код может идти в разделе заголовка, добавьте следующую функцию в ваш template.php.

function MYTHEME_preprocess_page (&$vars) {
  if ($vars['is_front']) {
    $vars['scripts'] .= "// my JS for the home page";
  }
}

Вы также можете добавить следующий код в соответствующем месте вашего page.tpl.php.

<?php if ($is_front): ?>
  // JS goes here
<?php endif; ?>

Есть и другие способы сделать это, но это, вероятно, самый простой.

mpdonadio
источник
-3

В Drupal 7, если вы хотите включить JS в тег с

Последнее решение, файл, который вы должны изменить, после того как вы скопировали его в вашу тему из системной папки, это html.tpl.php .

Не совсем Drupal, но работает

saropatzi
источник