2

我想在<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()函数中调用的那个。

如何将数据附加到 very 和 of <head>

4

4 回答 4

3

默认的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()其附加到 variable$head时,仍然会附加更多变量,如您所见。

一种可能的解决方案是附加你想要的东西$scripts,而不是$head.

如何?

使用模块中的预处理功能:

function MYMODULE_preprocess_page(&$variables) {
    $variables['scripts'] .= $your_stuff;
}

我没有尝试这个解决方案,但如果不起作用可能是因为执行顺序。尝试将模块的权重设置得更高,这样它就会system_preprocess_page.

其他可能不起作用的原因是因为主题在page.tpl.php中以不同的顺序打印变量。但是你不能从模块的代码中控制它。

于 2010-09-13T11:00:51.320 回答
3

有多种解决方案可以解决该问题。

  • 使用 hook_footer() 将 js 添加到页脚
  • 制作一个小的 jquery 脚本,它创建<script>元素并将其添加到<head>
  • 使用模板预处理功能
  • 制作自己的 page.tpl.php
于 2010-09-08T14:13:06.840 回答
2

你看到这条评论了吗?

使用它在 D6 中设置外部 js 文件调用时要小心,例如:

drupal_set_html_head('');

如果您不包含完整的脚本结束标记(即 ),它将在 Firefox 中中断(可能还有其他浏览器,基于 webkit 的浏览器似乎很好)。该标签将无法关闭,并将清除任何其他标题,直到下一个可用标签。这通常会导致您的所有 css 文件加载失败,以及下一个完全标记的 js 文件。因此,请改用此表单:

drupal_set_html_head('');

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

于 2010-09-08T14:38:58.250 回答
2

Drupal 使用.=操作符来创建$head变量。$jsand保存在$css一个数组中,并允许您重新排序。 $head是一个字符串,不能重新排序,否则是丑陋的,容易出错的黑客。例如正则表达式爆炸、重新排序和内爆。

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

在主题的变量预处理器中。

于 2010-09-10T07:31:02.677 回答