6

我需要在块文件中有条件地以编程方式添加一个 JS 文件。我尝试使用这些代码:

if (Mage::getStoreConfig('mymodule/settings/enable')) {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file1.js');
} else {
$this->getLayout()->getBlock('head')->addJs('path-to-file/file2.js');
}

但是,无论设置是什么,都不会加载此文件。我什至试图消除条件并仅显式加载一个文件,但它仍然不起作用。我在这里做错了什么?

4

3 回答 3

20

这里的问题可能是处理订单之一。我的猜测是你的 PHP 代码是在 head 块被渲染之后被评估的。虽然您的代码成功更新了头块类实例,但它发生在从该实例生成输出之后。

更好的解决方案是addJs()在布局 XML 中添加调用,以便在渲染之前对其进行处理。如果有一个ifnotconfig属性会很好,但现在你可以使用一个助手。

使用基于配置设置返回脚本路径的方法创建一个辅助类,然后将其用作返回参数。

<?php 
class My_Module_Helper_Class extends Mage_Core_Helper_Abstract
{
    public function getJsBasedOnConfig()
    {
        if (Mage::getStoreConfigFlag('mymodule/settings/enable')) {
            return 'path-to-file/file1.js';
        }
        else {
            return 'path-to-file/file2.js';
        }
    }
}

然后在布局 XML 中:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="head">
            <action method="addJs">
                <file helper="classgroup/class/getJsBasedOnConfig" />
                <!-- i.e. Mage::helper('module/helper')->getJsBasedOnConfig() -->
            </action>
        </reference>
    </default>
</layout>
于 2012-08-13T17:54:59.110 回答
5
$this->getLayout()->getBlock('head')->addJs('path');

它是正确的代码,搜索您的路径是否正确。

于 2012-08-13T16:41:53.293 回答
1

我知道这是很久以前问过的,但如果有人正在寻找这个,我建议在你的 local.xml 中使用它:

<layout>
    <default>
        <reference  name="head">
            <action ifconfig="path/to/config" method="addJs">
                <script>pathto/file.js</script>
            </action>
        </reference>
    </default> 
</layout>

当然,这是针对位于 /js/ 文件夹中的 JS 文件。如果要添加 skin_js 或 skin_css,请使用适当的方法。

PS。通过 CE 1.9 测试

于 2014-10-03T14:42:52.847 回答