Загрузить внешний скрипт в в Drupal 6
-
01-10-2019 - |
Вопрос
Я хочу загрузить внешний скрипт в <head>
. Отказ Это конкретный модуль, поэтому я хочу, чтобы мой модуль позаботился о загрузке.
В Drupal 6 функция drupal_add_js()
не позволяет добавлять внешний скрипт в <head>
. Отказ Это будет доступно в Drupal 7. прохождение "external"
аргумент к функции. В D6, я могу использовать drupal_set_html_head()
вместо этого, но он вставляет данные данные в начале <head>
который я не хочу. Я хотел бы добавить данные в нем.
Оказалось, что drupal_html_set_head()
Добавляет данные.
$stored_head .= $data ."\n";
Так что поведение, которое я экспериментировал - данные были вставлены в начале данных головки - должны прийти от этого я звоню drupal_html_set_head()
в моем модуле hook_init()
функция.
Как я могу добавить данные к самому <head>
?
Решение
По умолчанию Page.tpl.php.tphp. (Вы можете найти его в /modules/system/page.tpl.php. это:
<head>
<title><?php print $head_title; ?></title>
<?php print $head; ?>
<?php print $styles; ?>
<?php print $scripts; ?>
<script type="text/javascript"><?php /* Needed to avoid Flash of Unstyled Content in IE */ ?> </script>
</head>
Когда вы делаете drupal_set_html_head()
Это присоединяет вещи для переменной $head
, но все же есть больше переменных, добавленных, как вы видите.
Одним из возможных решений является добавление того, что вы хотите $scripts
, вместо $head
.
Как?
с предпроцессовой функцией из вашего модуля:
function MYMODULE_preprocess_page(&$variables) {
$variables['scripts'] .= $your_stuff;
}
Я не пробовал это решение, но если не будет работать, может быть, это потому, что порядок выполнения. Попробуйте установить вес вашего модуля выше, так что он будет работать после то system_preprocess_page
.
Другая причина, по которой не может работать, потому что тема печатает переменные в разном порядке в Page.tpl.php.tphp.. Отказ Но вы не можете контролировать это из кода модуля.
Другие советы
Есть несколько решений для работы по всей проблеме.
- Используйте Hook_footer (), чтобы добавить JS к нижнему нижню
- сделать небольшой сценарий jQuery, который создает
<script>
элемент и добавляет его к<head>
- Сделайте это с функцией предварительной обработки шаблона
- Сделайте свою собственную страницу .ttpl.php
Drupal использует .=
Оператор для создания $head
Переменная. То $js
а также $css
хранится в массиве и позволяет быть повторным заказом.$head
это строка, и не может быть повторным заказом, а затем уродливыми, прерываемыми хаками. Такие как взрывы регулярного выражения, повторное упорядочение и импульс.
$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);
в вашу переработку вашей темы.
Ты видел это комментарий?
Остерегайтесь при использовании этого для установки внешнего вызова файла JS в D6, например:
drupal_set_html_head ('');
Если вы не включите полный тег закрытия сценариев (т. Е.), он сломается в Firefox (и, возможно, другие браузеры, на основе WebKit, кажется, хорошо). Тег не сможет закрыть, и вытирает любые другие заголовки до следующего доступного тега. Обычно это приводит к тому, что все ваши файлы CSS не загружаются, а также следующий полностью помеченный файл JS. Так что используйте эту форму вместо этого:
drupal_set_html_head ('');
Это относится до и в том числе Drupal 6.16. Вы можете преодолеть его в D7 с новым внешним вариантом в Drupal_add_js.