第3步:在子菜单中创建网格。
网格页面需要接收数据,因此您必须在Mysql中创建一个简单的数据库表,其中包含2个字段:id和item。
在创建表之前,您需要设置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页面中。
结果: