Magento - xml布局,指定ifconfig的值?

时间:2011-04-08 13:58:36

标签: magento

我确定在某个地方之前看到过,为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>

2 个答案:

答案 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>