Can i use multiple grids in one magento module?
<?php
class <Namespace>_<Module>_Block_Adminhtml_<Module> extends Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_controller = 'adminhtml_<module>';
$this->_blockGroup = '<module>';
$this->_headerText = Mage::helper('<module>')->__('Item Manager');
$this->_addButtonLabel = Mage::helper('<module>')->__('Add Item');
parent::__construct();
}
}
so i can create one grid if i am bounded to use module, which means that grid is heavily dependent on module, so how can we use multiple grids in same module? I can’t find the way, plz guide me.
I am getting errors in my attempt to keep it move on. I am describing it more
My Grid Container
class World_Exporter_Block_Adminhtml_Import extends Mage_Adminhtml_Block_Widget_Grid_Container{
public function __construct()
{
// Correction made on getting answer
$this->_controller = 'adminhtml_import';
$this->_blockGroup = 'exporter';
// Correction made on getting answer
$this->_headerText = Mage::helper('exporter')->__('Item Manager');
$this->_addButtonLabel = Mage::helper('exporter')->__('Add Item');
}
}
And My Grid
class World_Exporter_Block_Adminhtml_Import_Grid extends Mage_Adminhtml_Block_Widget_Grid{
public function __construct(){
parent::__construct();
$this->setId('imports');
$this->setSaveParametersInSession(false);
// As it was not calling prepareCollection() I explicitly call it
$this->_prepareCollection();
}
protected function _prepareCollection(){
$collection = Mage::getModel('exporter/imports')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns(){
// return false;
$this->addColumn('import_id ', array(
'header' => Mage::helper('exporter')->__('ID'),
'align' => 'right',
'width' => '50px',
'index' => 'import_id ',
));
$this->addColumn('import_file', array(
'header' => Mage::helper('exporter')->__('File Name'),
'align' => 'left',
'index' => 'import_file',
));
$this->addColumn('import_time', array(
'header' => Mage::helper('exporter')->__('Import Time'),
'align' => 'left',
'index' => 'import_time',
));
$this->addColumn('profile_id', array(
'header' => Mage::helper('exporter')->__('Profile'),
'align' => 'left',
'index' => 'profile_id',
));
return parent::_prepareColumns();
}
protected function _prepareMassaction(){
$this->setMassactionIdField('import_id');
$this->getMassactionBlock()->setFormFieldName('imports');
return $this;
}
}
My Controller
class World_Exporter_Adminhtml_ExporterController extends Mage_Adminhtml_Controller_action{
public function importAction(){
$this->_initAction();
$this->_addContent($this->getLayout()->createBlock('exporter/adminhtml_import'));
$this->renderLayout();
}
}
My confix xml chunk
<models>
<exporter>
<class>World_Exporter_Model</class>
<resourceModel>exporter_mysql4</resourceModel>
</exporter>
<exporter_mysql4>
<class>World_Exporter_Model_Mysql4</class>
<!-- declate table test -->
<entities>
<profiles>
<table>profiles</table>
</profiles>
<imports>
<table>imports</table>
</imports>
<columns>
<table>columns</table>
</columns>
</entities>
<!-- -/- -->
</exporter_mysql4>
</models>
My model
class World_Exporter_Model_Imports extends Mage_Core_Model_Abstract
{
public function _construct()
{
$this->_init('exporter/imports');
}
}
Mysql4 Model
class World_Exporter_Model_Mysql4_Imports extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
$this->_init('exporter/imports', 'import_id');
}
}
My collection
class World_Exporter_Model_Mysql4_Imports_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct(){
parent::_construct();
$this->_init('exporter/imports');
}
}
See your grid container:
$this->_controller = 'adminhtml_exporter';should be$this->_controller = 'adminhtml_import';$this->_blockGroup = 'import';should be$this->_blockGroup = 'exporter';Why? From the name it is a bit ambiguous, yes it is named controller but you should take a look what is behind it.
Your container will create a child (the child is a grid):
$this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',$this->_controller . '.grid')
Your previous code will create:
$this->getLayout()->createBlock( 'import/adminhtml_exporter_grid','adminhtml_exporter.grid')
which is not correct, it should be:
$this->getLayout()->createBlock( 'exporter/adminhtml_import_grid','adminhtml_exporter.grid')
because your grid is
World_Exporter_Block_Adminhtml_Import_Grid