2014-07-24 14 views
1

你好,我已經創建了一個控制器。我想要在此控制器中呈現佈局的所有操作都排除頁眉和頁腳。是否有可能通過XML這一點。刪除控制器中的每個動作的塊

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

沒有這樣做每個動作?

還有一些像_beforeRenderLayout這樣的事件觀察者。

我現在唯一的解決方案是在每個操作中調用我自定義的exclude_redundant_blocks()函數,在$ this-> loadLayout()之後。

回答

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); 
} 

上面的代碼是未經測試,但在理論上它應該工作。

+0

這確實是最整潔的方法。我會這樣做 –

+0

謝謝你的回答。我不知道爲什麼我沒有想到覆蓋loadLayout。另外手柄的加載是非常好的模式,我不知道。 – letsanov

相關問題