我确定在某个地方之前看到过,为xml ifconfig语句指定一个值(默认情况下只是boolean)。无论如何,在管理中禁用模块实际上不起作用(仅禁用模块输出)。 但是您可以在布局文件中添加ifconfig,例如,仅在模块禁用时设置模板如下:
<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule">
<template>mytemplate.phtml</template>
</action>
那么你怎么能把它反转,所以只有当模块启用时才设置模板?类似的东西:
<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule" value="0">
<template>mytemplate.phtml</template>
</action>
答案 0 :(得分:22)
这与我一直在努力的something(自我链接)很吻合。
如果没有改写类来改变ifconfig
的行为,你就无法完全按照自己的意愿行事。这是实现ifconfig
功能的代码。
File: app/code/core/Mage/Core/Model/Layout.php
protected function _generateAction($node, $parent)
{
if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) {
if (!Mage::getStoreConfigFlag($configPath)) {
return $this;
}
}
如果检测到ifconfig,并且config值返回true,则不会调用action方法。你可以重写_generateAction
并实现你自己的条件,但是保持重写的标准负担会让你失望。
更好的方法是在动作参数中使用辅助方法。像这样的东西
<action method="setTemplate">
<template helper="mymodule/myhelper/switchTemplateIf"/>
</action>
将调用setTemplate以及对
的调用结果Mage::helper('mymodule/myhelper')->switchTemplateIf();
在switchTemplateIf
中实施自定义逻辑,以保留模板或更改模板,您将会很高兴。
答案 1 :(得分:9)
您可以使用模块的system.xml
创建单独的启用设置。
<config>
<sections>
<advanced>
<groups>
<YOURMODULE>
<fields>
<enable>
<label>YOUR MODULE</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_enabledisable</source_model>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</enable>
</fields>
</YOURMODULE>
</groups>
</advanced>
</sections>
</config>
然后使用布局文件中的新设置:
<action method="setTemplate" ifconfig="advanced/YOURMODULE/enable">
<template>mytemplate.phtml</template>
</action>