2012-05-13 38 views
1

我想了解Magento Blocks,因此我阅读了Magento 1.5的Mage_Core_Block_Abstract代码。了解Magento的unsetChild方法

插入件($块,,, $别名)方法 首先调用setChild($别名,$块)的方法,它建立一个_children阵列(值= $块,键= $别名),和 后构建一个_sortedChildren数组(value = $ name,key = number)。

我无法理解的是,unsetChild($化名)方法,取消设置_children [$别名】后项...试图找到通过array_search相应_sortedChildren项目($别名,_sortedChildren)......嗯,_sortedChildren的值是块名称,不是别名!

unsetChild是否与别名与其名称不相同的孩子工作?

+0

也许它是一个错误,也许它是固定在更多的新版本? – Zyava

+0

也许...有人可以检查更新的版本? – user1392439

+0

如果它是一个错误,我认为它位于insert方法中,而不是unsetChild方法。要问的问题是:是否将块名称用作_sortedChildren数组的值是正确的选择?为什么不是块本身,就像_children数组一样? – user1392439

回答

3

unsetChild是为将现有块从一个位置移动到另一个位置而创建的。您可以从其默认位置取消设置块,并在其他位置插入同名的块(您不能使用remove方法执行此操作,因为它会完全移除块)。

+0

谢谢!根据我在代码中读取的内容,如果别名与名称不相等,则块不会从_sortedChildren中取消设置。所以,如果你用相同的名字重新插入它,那么_sortedChildren数组中不会出现两次相同的块吗? – user1392439

+0

是的,我认为块会出现两次。 –

+0

这是预期的行为? getChildHtml('')遍历_sortedChildren,并呈现块......因此,如果别名和块不相等,但别名在重新插入时保持不变,我认为该块将呈现两次:不是移动,而是副本的块... – user1392439