2010-03-05 67 views
3

我目前正在使用Magento擴展,並且我重寫了一個核心控制器,它工作正常。Magento模塊 - 覆蓋控制器,添加模板

我現在已經向控制器添加了一個新的動作。問題在於,無論何時我稱之爲空白頁面,都會產生。如果我回應的東西它顯示正確。

因此,我深入到客戶模塊和控制器的核心。我在那裏看到,像indexAction()方法來實現的佈局是這樣的:

<?php 
public function indexAction() 
{ 
    $this->loadLayout(); 
    $this->_initLayoutMessages('customer/session'); 
    $this->_initLayoutMessages('catalog/session'); 

    $this->getLayout()->getBlock('content')->append(
     $this->getLayout()->createBlock('customer/account_dashboard') 
); 
    $this->getLayout()->getBlock('head')->setTitle($this->__('My Account')); 
    $this->renderLayout(); 
} 

我調到這個我自己的動作和佈局現在可以正確渲染。現在對於這個問題:

不管我進入->createBlock('...')調用什麼都沒有呈現到內容區域。

如何指定我自己的塊的位置作爲頁面的內容呈現,同時仍然使用佈局裝飾它?

我試着弄亂了/design/frontend/base/default/layout/myaddon.xml中的xml文件,但無法真正使它工作。

回答

6

在單個StackOverflow文章中涵蓋整個Magento佈局系統有點多,但您應該能夠通過以下方式實現您的目標。

$block = $this->getLayout()->createBlock('Mage_Core_Block_Text'); 
    $block->setText('<h1>This is a Test</h1>'); 
    $this->getLayout()->getBlock('content')->append($block); 

從上面開始,你應該能夠建立你需要什麼。想法是創建自己的塊,然後將它們附加到佈局中的現有塊。理想情況下,您要創建自己的塊類來實例化(而不是Mage_Core_Block_Text),並使用它們的內部模板機制加載phtml文件(將HTML生成與代碼生成分開)。

如果您有興趣瞭解佈局系統工作原理的內部情況,那麼您可能會做得比我寫的主題an article更糟糕。