Magento 1.9布局更新顺序/继承

时间:2015-02-17 20:17:29

标签: xml magento layout magento-1.9

Magento是否改变了1.9中布局更新的合并方式?我最近开始使用1.9.1.0,我注意到右侧栏上的一个块是重复的。此块由第三方模块添加,该模块以default / default存储其主题文件。我在local.xml中添加了代码以取消设置子项,然后重新添加它以使其显示在列的底部。这曾经在1.5.0.1中工作,但在1.9.1.0中不起作用。相反,我被迫使用<remove name=...>完全删除块,然后使用其他名称将其添加回来。这是我可以解决的问题,但是应该发生这种情况吗?

第三方模块的布局更新:

<default>
    <reference name="right">
        <block type="adjreminder/review" name="right.adjreminder" after="cart_sidebar" template="adjreminder/review.phtml" />
    </reference>
</default>

我的local.xml:

<default>
    <reference name="right">
        <action method="unsetChild">
            <name>right.adjreminder</name>
        </action>
        ...
        <block type="adjreminder/review" name="right.adjreminder" after="cart_sidebar" template="adjreminder/review.phtml" />
    </reference>
</default>

这并没有移动块,而是创建了第二个副本。 unsetChild没有做任何事情。修复它的唯一方法是让我把它放在我的local.xml中:

<default>
    <remove name="right.adjreminder" />

    <reference name="right">
        <block type="adjreminder/review" name="right.adjreminder" after="cart_sidebar" template="adjreminder/review.phtml" />
    </reference>
</default>

1 个答案:

答案 0 :(得分:1)

<remove>指令不会删除块,而是设置一个标志来忽略自身及其所有子节点的块渲染。如果您希望重新定位块,则需要使用<action>指令和insertappend的方法。

<reference name="right">
    <action method="unsetChild">
        <name>right.adjreminder</name>
    </action>

    <action method="insert">
        <name>right.adjreminder</name>
    </action>
</reference>

这些操作方法将使用当前块实例,而不是创建新的块实例。操作方法insert会将其放在子项列表的顶部,而append会将其放在底部。