Добавление javascript сразу после тега body - PullRequest
1 голос
/ 31 мая 2010

Я делаю друпальный модуль. Мое требование в модуле состоит в том, что, когда модуль активирован, ему нужно добавить javascript в файл page.tpl сразу после тега body. Может кто-нибудь помочь мне, как это сделать. Я попытался использовать drupal_add_js, но он не будет точно помещать скрипт после тега body, а помещает его в верхний или нижний колонтитул. Я также пытался использовать переменную шаблона и метод предварительной обработки, но проблема в том, что метод предварительной обработки заменяет старое значение этой переменной новым. Есть ли способ, как я могу реализовать это в.

Ответы [ 3 ]

1 голос
/ 01 июня 2010

я думаю, что лучший способ - это поместить его в нижний колонтитул следующим образом, в зависимости от темы, которую он будет отображать в конце страницы, что также означает, что оценка будет выполняться очень поздно, поэтому вам нужно поставить JS внизу:

$path_to_script = $drupal_get_path('module', 'my_module') . '/my_module.js');
drupal_add_js($path_to_script, $type = 'module', $scope  = 'footer');
0 голосов
/ 31 мая 2010

У Drupal нет API, позволяющего добавлять JS просто где угодно.

Самое простое решение - добавить его - вручную, жестко - в page.tpl.php в вашей теме. Если вам это не нравится, вы можете продолжить этот маршрут:

  • Добавьте переменную в page.tpl.php в том месте, где вы хотите печатать Js
  • При предварительной обработке переменных инициализируйте переменную для 'page' $ vars ['inline_js']
  • Самый простой способ заполнить эту переменную, это присвоить ей жестко закодированное значение (некрасиво)
  • Немного сложнее, но все же просто, присвоить ему переменную: variable_get ('inline_js', '... my_inline_js'). Затем вы можете установить эту переменную в вашем settings.php или написать очень простой модуль для ее установки.
0 голосов
/ 31 мая 2010

Вы можете реализовать функцию yourModule_preprocess_page(&$vars) в своем модуле, которая добавляет пользовательскую разметку включения JavaScript в качестве новой записи в массив $ vars, например, как $vars['yourModule_js']:

function yourModule_preprocess_page(&$vars) {
  $vars['yourModule_js'] = yourModule_create_js_markup(); // TODO: adjust to your needed output
}

Имея это, вы модифицируете свой файл page.tpl.php, чтобы проверить наличие этой переменной, и, если она есть, выведите ее в любом месте:

<?php if ($yourModule_js): ?>
  <?php print $yourModule_js; ?>
<?php endif; ?>

ПРИМЕЧАНИЕ. Это не рекомендуемый путь , так как он исключит ваш JavaScript из механизма кэширования / агрегирования Drupal и может легко вызвать проблемы / конфликты с другими JavaScript на вашем сайте. Вам следует подумать о том, чтобы настроить JavaScript для работы в соответствии с требованиями Drupal, подробности см. В Обзор JavaScript, AJAX, AHAH API и на страницах, связанных с JavaScript в Drupal *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...