我想在 <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 (您可以在 /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. 。但是您无法从模块的代码中控制这一点。

其他提示

有多种解决问题的解决方案。

  • 使用hook_footer()将JS添加到页脚
  • 制作一个小的jQuery脚本,创建 <script> 元素并将其添加到 <head>
  • 使用模板预处理函数进行操作
  • 制作您自己的页面.tpl.php

Drupal使用 .= 操作员创建 $head 多变的。这 $js$css 保留在数组中,允许您重新排序。$head 是一个字符串,不能被重新排序,然后再用丑陋的,容易出错的黑客。例如常规表达爆炸,重新排序和崩溃。

$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);

在您主题的变量前处理器中。

你看到了吗 评论?

当心使用此设置在D6中设置外部JS文件调用,例如:

drupal_set_html_head('');

如果您不包含完整的脚本关闭标签(即),它将破坏Firefox(甚至可能是其他浏览器,基于Webkit的浏览器看起来不错)。该标签将无法关闭,并将清除任何其他标题,直到下一个可用的标签。这通常会导致所有CSS文件未能加载,以及下一个完全标记的JS文件。因此,请改用此表格:

drupal_set_html_head('');

这适用于Drupal 6.16。您可以在DRUPAL_ADD_JS中使用新的外部选项在D7中克服它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top