我想在<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>
?
答案 0 :(得分:3)
有多种解决方案可以解决这个问题。
<script>
元素并将其添加到<head>
答案 1 :(得分: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()
时,它会将内容附加到变量$head
,但仍然会在您看到后添加更多变量。
一种可能的解决方案是将您想要的内容添加到$scripts
,而不是$head
。
如何?
使用模块中的预处理功能:
function MYMODULE_preprocess_page(&$variables) {
$variables['scripts'] .= $your_stuff;
}
我没有尝试这个解决方案,但如果不起作用可能是因为执行的顺序。尝试将模块的重量设置得更高,因此它将在 system_preprocess_page
之后运行。
其他可能无效的原因是因为主题是在 page.tpl.php 中以不同的顺序打印变量。但你无法通过模块的代码来控制它。
答案 2 :(得分:2)
你看到了comment吗?
使用此功能在D6中设置外部js文件调用时请注意,例如:
drupal_set_html_head( '');
如果您没有包含完整的脚本结束标记(即),它将会 在Firefox(可能还有其他浏览器,基于webkit的浏览器)中断 精细)。标签将无法关闭,并将删除任何其他标头 直到下一个可用的标签。这通常导致所有 您的css文件无法加载,加上下一个完全标记的js文件。所以 请改用此表格:
drupal_set_html_head( '');
这适用于Drupal 6.16。你可以克服它 D7在drupal_add_js中使用新的外部选项。
答案 3 :(得分:2)
Drupal使用.=
运算符创建$head
变量。 $js
和$css
保存在一个数组中,允许您重新排序。
$head
是一个字符串,不能重新排序,然后由丑陋,容易出错的黑客攻击。如正则表达爆炸,重新排序和爆炸。
$heads = preg_explode("\n", $head);
ksort($heads);
$head = implode("\n", $heads);
在主题的变量预处理器中。