在Controller中添加新块并将其设置在第一个位置

Han*_*ter 2 position block magento

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

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

在Layout.xml中,我在"content"structurblock中设置了另一个内容块.

<reference name="content">
    <block type="contactus/form" name="contact_us" template="contactus/contactus.phtml"/> 
</reference>
Run Code Online (Sandbox Code Playgroud)

我想要块之前的CMS contact_us块.在Layout.xml我可以使用前后的参数.如果我写after="-"的块将被设置在结构块"内容"的最后位置,那是对的吗?这不起作用.如何php在Controller中设置此参数?还是其他想法?

ben*_*rks 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).