删除控制器中每个操作的块

时间:2014-07-24 11:36:29

标签: magento

大家好我已经创建了一个控制器。我希望此控制器中的每个操作都呈现布局以排除页眉和页脚。是否有可能通过xml。

<adminhtml_trips_index>
    <remove name="header" />
    <remove name="menu" />
    <remove name="footer" />

不对每个动作执行此操作?

还有像_beforeRenderLayout这样的事件观察者。

我目前唯一的解决方案是在每个操作中的$ this-&gt; loadLayout()之后调用我自定义的exclude_redundant_blocks()函数。

1 个答案:

答案 0 :(得分:4)

为什么不覆盖自己控制器中的loadLayout方法并在此之后排除块而不是在每个操作中执行?

这样的事情:

public function loadLayout($ids=null, $generateBlocks=true, $generateXml=true)
{
    parent::loadLayout($ids, $generateBlocks, $generateXml);
    //remove blocks here
    return $this;
}

或者另一种方法是创建一个删除不需要的块的客户布局句柄

<custom_handle>
    <remove name="header" />
    <remove name="menu" />
    <remove name="footer" />
</custom_handle>

然后在每个动作中加载该句柄 再次重写loadLayout方法并使其看起来像这样

public function loadLayout($ids=null, $generateBlocks=true, $generateXml=true)
{
    $this->getLayout()->getUpdate()->addHandle('custom_handle')
    return parent::loadLayout($ids, $generateBlocks, $generateXml);
}

上面的代码未经测试,但理论上它应该可行。