Вопрос

Я хочу загрузить внешний скрипт в <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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top