我需要在块文件中有条件地以编程方式添加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');
}
但是,无论设置是什么,都不会加载此文件。我甚至试图消除这种情况并仅显式加载一个文件,但它仍然无效。我在这做错了什么?
答案 0 :(得分:20)
这里的问题可能是处理订单之一。我的猜测是在渲染头部块之后正在评估您的PHP代码。当您的代码成功更新头块类实例时,它会在从该实例生成输出后发生。
更好的解决方案是在布局XML中添加addJs()
调用,以便在渲染之前处理它们。如果有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>
答案 1 :(得分:4)
$this->getLayout()->getBlock('head')->addJs('path');
正确的代码,搜索路径是否正确。
答案 2 :(得分: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上测试