У вас нет блока с именем 'report_sales_ereaders.grid' , потому что этот блок динамически создается Magento здесь:
// class Mage_Adminhtml_Block_Widget_Grid_Container
protected function _prepareLayout()
{
$this->setChild( 'grid',
$this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
$this->_controller . '.grid')->setSaveParametersInSession(true) );
return parent::_prepareLayout();
}
$ this -> _ контроллер - ключ здесь,И вы определяете его внутри своего блока, который, видя, что ваш sales.xml - это «adminhtml / report_sales_sales».
Этот блок должен простираться от Mage_Adminhtml_Block_Widget_Grid_Container , и вы должны определить :: _ контроллер в конструкторе этогоblock:
public function __construct()
{
$this->_blockGroup = 'something';
$this->_controller = 'report_sales_ereaders'; // THIS !!!
parent::__construct();
... // see a similar block from magento
}
Также обратите внимание на первый код выше (_prepareLayout), что Mage_Adminhtml_Block_Widget_Grid_Container попытается использовать блок с именем (uri):
'что-то / report_sales_ereaders_grid'
поэтому вам также нужен этот класс, и, следовательно, вы, вероятно, захотите изменить «что-то» с узлом, используемым в файле config.xml, под <blocks>
, у этого блока будет имя (внутри вашего макета): "report_sales_ereaders.grid"
Итак, в зависимости от того, что вы хотите сделать, у вас есть два варианта:
1) Измените тип вашего блока в вашем sales.xmlмакет, так что он указывает на ваш собственный блок (и вы определяете там свой «_controller», как я показал выше, и т. д.).
2) Измените
$gridBlock = $this->getLayout()->getBlock('report_sales_ereaders.grid');
на
$gridBlock = $this->getLayout()->getBlock('report_sales_sales.grid');
, поскольку «report_sales_sales» - это значение «_controller» внутри блока «adminhtml / report_sales_sales» (Mage_Adminhtml_Block_Report_Sales_Sales
).