我可以在一个magento模块中使用多个网格吗?
<?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();
}
}
所以我可以创建一个网格,如果我有限使用模块,这意味着网格严重依赖于模块,那么我们如何在同一模块中使用多个网格?我找不到方法,请指导我。
我试图继续前进时遇到错误。我正在描述它
我的网格容器
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');
}
}
和我的网格
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;
}
}
我的控制器
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();
}
}
我的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>
我的模特
class World_Exporter_Model_Imports extends Mage_Core_Model_Abstract
{
public function _construct()
{
$this->_init('exporter/imports');
}
}
Mysql4模型
class World_Exporter_Model_Mysql4_Imports extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
$this->_init('exporter/imports', 'import_id');
}
}
我的收藏
class World_Exporter_Model_Mysql4_Imports_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct(){
parent::_construct();
$this->_init('exporter/imports');
}
}
答案 0 :(得分:3)
是的,你可以。下面是您应该在一个模块中使用多个网格的结构。
- Namespace
- Module
- Block
- Adminhtml
- Submodule1
- Grid.php
- Submodule2
- Grid.php
- Submodule3
- Grid.php
答案 1 :(得分:1)
查看您的网格容器:
class World_Exporter_Block_Adminhtml_Import extends Mage_Adminhtml_Block_Widget_Grid_Container{
public function __construct()
{
//should be $this->_controller = 'adminhtml_import';
$this->_controller = 'adminhtml_exporter';
//should be $this->_blockGroup = 'exporter';
$this->_blockGroup = 'import';
$this->_headerText = Mage::helper('exporter')->__('Item Manager');
$this->_addButtonLabel = Mage::helper('exporter')->__('Add Item');
parent::__construct();
}
}
$this->_controller = 'adminhtml_exporter';
应为$this->_controller = 'adminhtml_import';
$this->_blockGroup = 'import';
应为$this->_blockGroup = 'exporter';
为什么呢?从名称来看它有点含糊不清,是的,它被命名为控制器,但你应该看一下背后的内容。
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->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
$this->_controller . '.grid')
您之前的代码将创建:
$this->getLayout()->createBlock( 'import/adminhtml_exporter_grid',
'adminhtml_exporter.grid')
这是不正确的,它应该是:
$this->getLayout()->createBlock( 'exporter/adminhtml_import_grid',
'adminhtml_exporter.grid')
因为您的网格是World_Exporter_Block_Adminhtml_Import_Grid