2013-08-19 23 views
6

Jestem trochę zdezorientowany. Przeczytałem wspaniały artykuł Alana Storma na temat Magento Block Lifecycle Methods i o ile rozumiem, należy użyć metody protected _construct(), aby zainicjować blok. W moim przypadku chcę ustawić odpowiedni szablon bloku. Zakładam więc, że należy używaćKonstrukcja bloku Magento - użyj _construct lub __construct?

protected function _construct() 
{ 
    parent::_construct(); 
    $this->setTemplate('stenik/qaforum/forum.phtml'); 
} 

Jednak kiedy patrzę na blokach niektórych modułów Magento rdzeniowych, wydają się użyć metody php __construct to zrobić. Na przykład Mage_Poll_Block_Poll, Mage_ProductAlert_Block_Price, Mage_Rating_Block_Entity_Detailed, Mage_Review_Block_Form

Chociaż obie strony rzeczywiście działa, chciałbym wiedzieć, co jest właściwym sposobem, aby to zrobić.

Odpowiedz

8

To ostatecznie akademickich, ale właściwy sposób robienia it® jest nadpisać konstruktor Magento tj _construct wymagane przez zespół rdzenia w Mage_Core_Block_Abstract:

/** 
* Internal constructor, that is called from real constructor 
* 
* Please override this one instead of overriding real __construct constructor 
* 
*/ 
protected function _construct() 
{ 
    /** 
    * Please override this one instead of overriding real __construct constructor 
    */ 
} 
+5

+1 do właściwej rady, ale to ISN” t 100% akademicki - gdy nadpisujesz metodę '__construct', wprowadzasz możliwość nie wywoływania macierzystego' __construct' lub wywoływania rodzica '__construct' i usuwania argumentów konstruktora. Może to powodować niespójności w zachowaniu się bloków podczas korzystania z aktualizacji xml układu. –

+0

Warto podkreślić, ponieważ moja odpowiedź zakłada, że ​​programiści zawsze robią Do The Right Thing®. – benmarks