代码之家  ›  专栏  ›  技术社区  ›  viam0Zah

在Drupal 6的<head>中加载外部脚本

  •  2
  • viam0Zah  · 技术社区  · 14 年前

    我想加载一个外部脚本 <head> . 它是特定于模块的,所以我希望我的模块负责加载。

    在Drupal 6中,函数 drupal_add_js() 不允许在中添加外部脚本 <头& . 它将在 Drupal 7 路过 "external" 函数的参数。 在d6中,我可以使用 drupal_set_html_head() 而是将给定的数据插入 <头& 我不想要。 我想在里面附加数据 .

    结果是 drupal_html_set_head() 追加数据。

    $stored_head .= $data ."\n";
    

    所以我试验的行为——数据被插入头数据的开头——应该来自我调用的 drupal_html_set_head()。 在我的模块中 hook_init() 功能。

    如何将数据附加到 <头& ?

    4 回复  |  直到 11 年前
        1
  •  3
  •   viam0Zah    14 年前

    默认值 (你可以在 /模块/系统/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 而不是 元首 .

    怎么用?

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

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

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

    另一个可能不起作用的原因是主题以不同的顺序打印变量 . 但是你不能通过一个模块的代码来控制它。

        2
  •  3
  •   tamasd    14 年前

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

    • 使用hook_footer()将JS添加到页脚
    • 生成一个小的jquery脚本,该脚本创建 <script> 元素并将其添加到 <head>
    • 使用模板预处理函数
    • 创建自己的page.tpl.php
        3
  •  2
  •   viam0Zah    14 年前

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

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

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

        4
  •  2
  •   chrisl-921fb74d    11 年前

    你看到这个了吗 comment ?

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

    drupal_set_html_head('');

    如果不包含完整的脚本结束标记(ie),它将 在firefox(可能还有其他浏览器,基于webkit的浏览器)中有所突破 很好)。标记将无法关闭,并将清除所有其他头文件 直到下一个可用标签。这通常会导致 您的CSS文件加载失败,加上下一个完全标记的JS文件。所以 改为使用此表单:

    drupal_set_html_head('');

    这适用于Drupal 6.16及以下。你可以克服它 D7在Drupal中添加了新的外部选项。

    推荐文章