如何在Joomla中使用headjs?

时间:2011-08-31 14:28:28

标签: joomla joomla-extensions joomla-template joomla1.7 head.js

尝试在Joomla中使用HeadJS。我在我的模板中添加了一个代码 - 它抓取head输出中的javascript文件,准备一个字符串以在head.js代码之间输出它们,然后从joomla的head输出标记中删除所有javascript文件。

问题是在模板之后加载了一些脚本。例如,模块在加载模板后会将某些脚本文件排入队列,因此其文件显示在head.js代码之外。我有什么想法可以控制它吗?

$data = $this->getHeadData();

if( $data['scripts'] ){
    foreach ($data['scripts'] as $url=>$type){
        if( !strstr($url, 'ajax.googleapis.com/ajax/libs/jquery') )
        $headjs[] = $url;
    }
    unset( $data['scripts'] );
    $data['scripts'][$template . '/js/head.js'] = array(
        'mime' => 'text/javascript',
        'defer' => false,
        'async' => false);
    $this->setHeadData($data);
}

然后......

 <script>
        head.js(
        <? foreach($headjs as $script): ?>
            '<?=$script?>',
        <? endforeach; ?>
            function(){
            }
        );
    </script>

1 个答案:

答案 0 :(得分:2)

不同的扩展可以连接到处理输出期间触发的不同事件(因此即使在渲染模板之后也是如此)。

我到目前为止找到的最佳选择是创建系统插件并将其命令移动到最后一个可用的系统插件中。

现在您有两个选择:

  1. 使用onBeforeCompileHead事件(我想介绍Joomla 1.5.23)将脚本移动到headjs。
  2. 使用onAfterRender事件并解析头部html代码,以便使用headjs加载。
  3. 如果您使用异步脚本加载可以完全控制网站的地方,这很好,但几乎不可能实现作为Joomla的通用扩展。一些扩展使用head中的内联脚本,一些在html体中,你必须保留执行顺序(简单的例子:Mootools必须先加载)。

    我用异步加载我自己包含的那些脚本(在我的模板或扩展名中)。使用Joomla核心(Mootools,core.js等)添加的任何脚本或我不接触的其他扩展。