Magento:是否从布局xml文件中设置ParentBlock?

Magento:是否从布局xml文件中设置ParentBlock?,magento,block,parent,Magento,Block,Parent,存在 public Mage_Core_Block_Abstract::setParentBlock(Mage_Core_Block_Abstract $block) 显然,它将块对象作为参数。我试过: <reference name="myBlock"> <action method="setParentBlock"> <block><reference name="newParent"/></block>

存在

public Mage_Core_Block_Abstract::setParentBlock(Mage_Core_Block_Abstract $block)
显然,它将块对象作为参数。我试过:

<reference name="myBlock">
    <action method="setParentBlock">
        <block><reference name="newParent"/></block>
    </action>
</reference>

但是,没有运气。 有什么想法吗?

甚至有人可以从布局文件中将块对象传递给方法吗?

不能从布局XML文件调用该方法。布局XML文件的
节点主要(见下文)用于将字符串作为参数传递。这意味着任何类型提示显式需要对象的方法

Mage_Core_Block_Abstract $block
并不意味着要从XML调用。这是系统实现中使用的一种方法,布局XML系统旨在保护您不被意外调用

此外,您不能以您尝试的方式使用引用

<reference name="newParent"/>
其中
someMethod
返回您要查找的块

Mage::helper('core/data')->someMethod(parameters,from,attributes,above);

但是,更改块的父中间渲染有点滥用布局系统,我建议不要这样做(除非没有其他方法获得所需内容)

您根本不必担心这一点,因为建立关联的方式通常与此相反,但是如果您想设置父对象,可以使用
parent
块属性:

<block type="..." name="..." parent="parentblockname" ... />


你说的绝对正确,我在跟踪它的工作原理后说:)。尽管如此,它真的是中间渲染吗?我不确定。奇怪的是,我不能接受一个已经定义好的布局块,而只是通过选择另一个父名称来重新定位它。这并不是真正必要的,但它会更加优雅。@dror请参见下面Ben的回答-另外,请参见
unsetChild
setChild
。这通常是人们实现你刚才在评论中描述的目标的方式。是的,它实际上是中期渲染。在我的特殊情况下,基本布局中的块没有alias/as属性。。因此,我不能真正使用un/setChild..@Dror如果没有别名集,那么块的名称就足够了。如果我采用这种方法,那么,另一个块已经以完全相同的方式定义,除了没有显式的父名称(但在另一个父级内),结果会是什么?也许两者都会注册?或者,在处理您的建议时,可能只更新单个块的父块(我的目标是:)?我不确定是否遵循,但是,需要创建父块。请记住,在Magento渲染中,重要的是父对象通过insert或setChild在其上设置子对象,因为这是渲染的“方向”——父对象到子对象。
Mage::helper('core/data')->someMethod(parameters,from,attributes,above);
<block type="..." name="..." parent="parentblockname" ... />