在Drupal 6中加载外部脚本

时间:2010-09-08 14:01:41

标签: drupal drupal-6 external-script html-head

我想在<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>

4 个答案:

答案 0 :(得分:3)

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

  • 使用hook_footer()将js添加到页脚
  • 制作一个小的jquery脚本,用于创建<script>元素并将其添加到<head>
  • 使用模板预处理功能
  • 制作您自己的page.tpl.php

答案 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);

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