在Magento 1中创建管理网格的3个简单步骤(三)

第3步:在子菜单中创建网格。

网格页面需要接收数据,因此您必须在Mysql中创建一个简单的数据库表,其中包含2个字段:iditem

在创建表之前,您需要设置Model,Resource for Data Collection。

创建基础模型: app \ code \ local \ Bss \ AdminGrid \ Model \ Adgrid.php

<?php
class Bss_AdminGrid_Model_Adgrid extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {  
        $this->_init('admingrid/adgrid');
    }  
}

创建资源: app \ code \ local \ Bss \ AdminGrid \ Model \ Resource \ Adgrid.php

<?php
class Bss_AdminGrid_Model_Resource_Adgrid extends Mage_Core_Model_Resource_Db_Abstract
{
    protected function _construct()
    {  
        $this->_init('admingrid/adgrid', 'id');
    }  
}

创建集合: app \ code \ local \ Bss \ AdminGrid \ Model \ Mysql4 \ Adgrid \ Collection.php

<?php
class Bss_AdminGrid_Model_Mysql4_Adgrid_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
    protected function _construct()
    {  
        $this->_init('admingrid/adgrid');
    }  
}

在文件config.xml中声明模型和资源。

将所有这些代码放入<global>标记中。

模型:

<models>
            <admingrid>
                <class>Bss_AdminGrid_Model</class>
                <resourceModel>admingrid_resource</resourceModel>
            </admingrid>
             
            <!-- Resource model to create a database table -->
            <admingrid_resource>
                <class>Bss_AdminGrid_Model_Resource</class>
                <entities>
                    <adgrid>
                        <table>admingrid_adgrid</table>
                    </adgrid>                    
                </entities>
            </admingrid_resource>
        </models>

资源设置脚本:

<resources>
			 <admingrid_setup>
				 <setup>
				 <module>Bss_AdminGrid</module>
				 </setup>
			 </admingrid_setup>

        <admingrid_write>
            <connection>
                <use>core_write</use>
            </connection>
        </admingrid_write>

        <admingrid_read>
            <connection>
                <use>core_read</use>
            </connection>
        </admingrid_read>
		 </resources>

通过创建文件创建表。


app\code\local / BSS \ AdminGrid \ SQL \ admingrid_setup \ mysql4安装-1.0.0.php。

(1.0.0是config.xml中的模块版本)

<?php 

$installer = $this; 

$installer->startSetup(); 

$table = $installer->getConnection()
    ->newTable($installer->getTable('admingrid/adgrid'))
    ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'unsigned'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Id')
    ->addColumn('item', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
        'nullable'  => true,
        ), 'Items');
$installer->getConnection()->createTable($table);

$installer->endSetup();

其中:

表名:admingrid_adgrid。

列:id,item。

还有另一种在Magento数据库中创建表的方法。

$installer = $this;
$installer->startSetup();
$installer->run("
    DROP TABLE IF EXISTS {$this->getTable('admingrid/adgrid')};
    CREATE TABLE {$this->getTable('admingrid/adgrid')} (
      `id` int(11) unsigned NOT NULL auto_increment,
      `item` text NULL ,
      PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        ");
$installer->endSetup();

但我建议使用默认的Magento函数来创建数据库表。

设置网格。

Backend中的网格页面将像表格一样显示数据库。您可以使用它来管理模块的数据。以下是在Backend中创建简单网格页面的步骤。

创建Controller for Grid页面后端app \ code \ local \ Bss \ AdminGrid \ controllers \ Adminhtml \ AdgridController.php。

<?php
class Bss_AdminGrid_Adminhtml_AdgridController extends Mage_Adminhtml_Controller_Action
{

	protected function _isAllowed()
    {
        return Mage::getSingleton('admin/session')->isAllowed('admingrid/adgrid');
    }


	public function indexAction()
    {
       	   $this->loadLayout();
	   $this->_title($this->__("Admin Grid"));
	   $this->renderLayout();
    }
}

其中:

$ this-> loadLayout():从adminhtml(app \ design \ adminhtml \ default \ default \ layout \ adgrid.xml)中配置的文件布局中获取信息。

$ this - > _ title($ this - > __(“Admin Grid”)):网格页面的名称。

$ this-> renderLayout():将所有模块块渲染到Grid页面。

请记住:后端控制器必须放在Adminhtml文件夹中,因为Controller类继承了Magento Mage_Adminhtml_Controller_Action的类。

在文件config.xml中声明adminhtml的布局,代码必须放入标记:

<layout>
	  <updates>
		<admingrid>
		  <file>admingrid.xml</file>
		</admingrid>
	  </updates>
	</layout>

为Grid页面创建布局文件:app \ design \ adminhtml \ default \ default \ layout \ admingrid.xml

<?xml version="1.0"?>
<layout version="0.1.0">
  <adminhtml_adgrid_index>
	<reference name="content">
	  <block type="admingrid/adminhtml_adgrid" name="adgrid"/>
	</reference>
  </adminhtml_adgrid_index>
</layout>

创建网格块页面。现在,您开始设置Grid块容器以显示在Grid页面中呈现的网格。最后,我们需要定义blockin文件config.xml的链接。

<blocks>
	  <admingrid>
		<class>Bss_AdminGrid_Block</class>
	  </admingrid>
	</blocks>

此块也放在文件夹Block / Adminhtml中,因为admin块的类继承了Mage_Adminhtml_Block_Widget_Grid


app\code\local / BSS \ AdminGrid \块\ Adminhtml \ Adgrid.php

class Bss_AdminGrid_Block_Adminhtml_Adgrid extends Mage_Adminhtml_Block_Widget_Grid_Container {
    public function __construct()
    {
        $this->_blockGroup = 'admingrid';
        $this->_controller = 'adminhtml_adgrid';
        $this->_headerText = $this->__('Grid');
         
        parent::__construct();
    }
}

其中:

$ this - > _ controller:声明控制器的网格。

$ this - > _ headerText:左上角的网格名称。

设置网格块容器后,您需要设置网格内容:app \ code \ local \ Bss \ AdminGrid \ Block \ Adminhtml \ Adgrid \ Grid.php

在此文件中,类Bss_AdminGrid_Block_Adminhtml_Adgrid_Grid将扩展Mage_Adminhtml_Block_Widget_Grid。

在__construct()中,我们为grid定义了一些默认值:

    public function __construct()
    {
        parent::__construct();
         
        $this->setDefaultSort('id');
        $this->setId('admingrid_adgrid_grid');
        $this->setDefaultDir('asc');
        $this->setSaveParametersInSession(true);
    }

获取网格的集合数据:

protected function _getCollectionClass()
    {
        return 'admingrid/adgrid_collection';
    }
     
    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        $this->setCollection($collection);
         
        return parent::_prepareCollection();
    }

创建网格表中显示的列:

protected function _prepareColumns()
    {

        $this->addColumn('id',
            array(
                'header'=> $this->__('ID'),
                'align' =>'right',
                'width' => '50px',
                'index' => 'id'
            )
        );
         
        $this->addColumn('items',
            array(
                'header'=> $this->__('Items'),
                'index' => 'items'
            )
        );         
        return parent::_prepareColumns();
    }   

其中:

$ this-> addColumn:创建列函数。

我们有一些简单的参数来创建columnsalign,width:Css属性。

index(必需):将在此列中调用数据库中的一个字段。

当您在后端单击菜单AdminGrid / Manage Items时,您将看到创建了一个简单的Grid页面。

但是Grid会显示一个文本“找不到记录”。因为Mysql中的admingrid_adgrid表没有任何值。所以我们需要在这个表中创建样本值以显示在Grid页面中。

结果:

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论