布局中删除和 unsetChild 方法有什么区别?
例如(在poll.xml布局文件中):
<customer_account_index>
<reference name="right">
<action method="unsetChild"><name>catalog_compare_sidebar</name></action>
</reference>
</customer_account_index>
为什么 unsetChild 而不只是删除?
答案 0 :(得分:38)
删除节点将在合并所有布局句柄后处理,并且无论哪个布局句柄加载块,都是删除块的好方法;你只是想完全摆脱一些手柄!它也会递归删除,因此您需要指定的是布局句柄。
另一方面,您可能只想从特定布局句柄中的引用中删除块,在这种情况下,您应该使用unsetChild。它通常用于从引用中删除块,但随后重新插入具有不同位置的相同块。删除时无法做到这一点。
在您的具体示例中,magento开发人员使用它来为magento提供一些灵活性。假设我为帐户索引页面添加了一个子页面,并加载了以下布局句柄:
现在假设在这个子页面上我真的想要'catalog_compare_sidebar'块。如果他们使用'删除',我将无法添加此块(具有此特定名称),因为'remove'将被处理 - 之后我自己添加了块。
这使您可以轻松地从一个文件进行更改;那个local.xml。
答案 1 :(得分:1)
以您的代码为例,如果您使用unsetchild
,请比较从右栏删除的侧边栏,但您可以在左栏,页脚等任何位置使用它。remove
完全从模板,不能在任何地方使用。
使用remove
删除比较边栏,如果在其他地方调用它,则会抛出错误。