Вы неправильно получаете объект макета (Mage_Core_Model_Layout
). В контроллерах и блоках действий это $this->getLayout()->createBlock()
, везде - Mage::app()->getLayout()->createBlock()
EDIT : Сергей также указал, что объект макета не загружен, и это заставило меня понять, что вы используете php __construct()
, а не типичный Magento _construct()
. Для экземпляров блока не устанавливается объект макета до тех пор, пока они не будут созданы (и был вызван их конструктор) в Mage_Core_Model_Layout::createBlock()
- обратите внимание, что в этом методе экземпляр блока получает макет, установленный на нем, с помощью его метода setLayout()
. Это цель метода блока _prepareLayout()
- это метод, похожий на конструктор, который запускается после создания экземпляра блока.
Исправления к вашему коду ниже:
<?php
class RedoxStudios_ErpTab_Block_Adminhtml_Catalog_Product_Tab
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface {
/*
* Set the template for the block
*/
protected function _construct()
{
$this->setTemplate('Purchase/Product/StockDetails/Summary.phtml');
}
public function _prepareLayout()
{
$this->getLayout()->createBlock('Purchase/Product_Widget_StockDetails_Summary');
$this->setProduct($this->getProduct());
}
// ...
}