2

我可以在一个 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 块

<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');
        }
  }
4

2 回答 2

3

是的你可以。以下是在一个模块中拥有多个网格时应采用的结构。

- Namespace
  - Module
     - Block
        - Adminhtml
           - Submodule1
              - Grid.php
           - Submodule2
              - Grid.php
           - Submodule3
              - Grid.php
于 2012-09-06T13:42:48.923 回答
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

于 2012-09-07T13:46:20.670 回答