2

我在控制器中添加了一个新块,这是有效的。

$this->loadLayout();
$cmsBlock = $this->getLayout()->createBlock('cms/block')->setBlockId('cms_block_fail');
$this->getLayout()->getBlock('content')->append($cmsBlock);
$this->renderLayout();

在 Layout.xml 中,我在“内容”结构块中设置了另一个内容块。

<reference name="content">
    <block type="contactus/form" name="contact_us" template="contactus/contactus.phtml"/> 
</reference>

我想要块之前的 CMScontact_us块。在Layout.xml我可以使用前后的参数。如果我写after="-"的块将被设置在结构块“内容”的最后一个位置,对吗?这是行不通的。如何php在 Controller 中设置此参数?还是其他想法?

4

1 回答 1

7

$this->getLayout()->getBlock('content')->insert($cmsBlock,'contact_us');应该导致在块之前$cmsBlockarray_splice()编辑到content块的_sortedChildren()数组中contact_us

逻辑有点深奥,但你可以找到更多关于它是如何工作的信息Mage_Core_Block_Abstract::insert()——注意它append($block)本质上是insert($block,'',true).

于 2012-10-18T00:19:23.713 回答