布局中<remove name =“” />和<action method =” unsetChild”>之间的区别


21

<action method=”unsetChild”>和之间有什么区别<remove name=""/>

这两个功能均用于从布局中删除块。

有人可以举例说明吗?

Answers:


21

<remove name="" />在的全局块范围内运行Mage_Core_Model_Layout。它们被收集Mage_Core_Model_Layout::generateXml()用于防止实例化具有指定名称的块。此外,宣布对所有子块<remove />编块还没有被实例化

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()是一种块级方法,该方法从正在对其调用操作的父块实例中列出所指示的子块(通过别名,而不是通过name)。即使仍创建块实例,这通常会导致块从渲染的输出中“消失”。与::append()::insert()方法结合使用,可用于执行“移动”。


只是要补充一点,如果块没有别名,那么它将与名称匹配。
本·克鲁克

2
正确,如果未提供别名,则将aliasfor子项设置为name。👍–
benmarks

2

<remove name="" />,完成所有布局后,Magento将完全删除具有指定名称=“”的块,无论已将其添加到哪个布局句柄。使用这种方法不可能从一个位置删除一个块,然后将其添加到另一个位置

<action method="unsetChild">仅在使用它的上下文中运行。创建unsetChild的目的是将现有块从一个位置移动到另一个位置。如果要从特定的布局手柄中删除特定的块,然后将其插入另一个位置或布局手柄,则需要使用此方法。


不完全的; 请参阅我的更正答案。
Benmarks 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.