1

我正在开发一个模块,其中我们的配置为“advanemenu/general/enabled”

通过使用此配置,我可以有条件地将项目添加到我的 magento 前端。

前任。

<reference name="head">
     <action method="addItem" ifconfig="advancemenu/general/enabled"><type>skin_css</type><name>css/advancemenu.css</name></action>
</reference>

现在类似地,如果启用了配置值,我想删除顶部导航。

我尝试了以下但没有任何结果......

<remove ifconfig="advancemenu/general/enabled" name="catalog.topnav" />

如果 ifconfig 可以使用,<action>那么是否有任何方法可以使用此方法删除顶部导航。

如果有人知道如何做到这一点,请帮助我。(提前谢谢)

4

2 回答 2

5

IfConfig 仅适用于操作方法。当您在 xml 布局中调用操作时,此解析会调用块实例中的函数。

你可以看到这个:

文件:app/code/core/Mage/core/Model/layout.php 第 289 行左右

protected function _generateAction($node, $parent)
    {
        if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) {
            if (!Mage::getStoreConfigFlag($configPath)) {
                return $this;
            }
        }

但一个可行的解决方案是仅在具有真实价值的情况下添加模板。例如

<reference name="head">
     <action method="setTemplate" ifconfig="advancemenu/general/enabled">
       <template>route/to/template</template>
     </action>
</reference>

然后,只有当你启用你的模块时,你才有模板关联到这个块,在另一种情况下,你的块没有模板,然后不加载。

于 2012-07-17T14:26:32.103 回答
3

您可以使用 unsetchild 方法删除任何块。

对于上述情况

<reference name="top.menu">
            <action method="unsetChild" ifconfig="advancemenu/general/enabled">
                <name>catalog.topnav</name>
            </action>
        </reference>

这将有助于条件删除语句。

于 2012-07-17T15:25:13.303 回答