我需要有条件和程序添加一个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');
}
然而,无论设置是什么,没有这个文件被加载。 我甚至想消灭的条件,并明确只加载一个文件,但它仍然无法正常工作。 我做了什么错在这里?
这里的问题是处理顺序可能之一。 我的猜测是,头块已经被渲染后,你的PHP代码被评估。 当你的代码成功更新头块类的实例,产量已经从实例生成后,它的发生。
更好的解决方法是将添加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>
$this->getLayout()->getBlock('head')->addJs('path');
其正确的代码,搜索,如果你的道路是正确的。
我知道这是问了很久以前的事,但如果有人在找这个,我会建议你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