目的是做一个grid,参考博客http://www.sunzhenghua.com/magento-admin-module-development-part1-grid-forms-tabs-controllers,

由于少了很多基础的配置,我便补充了一下

一。

开发的目录结构如下:Jago->Employee:

第一步是建立module,在config.xml下进行配置:

<config>
<modules>
<Jago_Employee>
<version>1.0.0</version>
</Jago_Employee>
</modules>
</config

然后在app/etc/modules目录下建立Jago_Employee.xml文件:

<config>
<modules>
<Jago_Employee>//取这个名字是与上面的目录对应,文件名同理
<active>true</active>
<codePool>local</codePool>
</Jago_Employee>
</modules>
</config>

完成这一步 可以进入后台System->Configuration->Advanced看看,在Disable Modules Output下面会有Jago_Employee 字段。第一步算是成功了。

接下去是在后台导航条中插入菜单:

依然是config.xml文件中加入如下代码

<config>
   .....
  <adminhtml>
<menu>
<employee module="employee">
<title>Employee</title>//导航条上的名字
<sort_order>71</sort_order>
<children>
<items module="employee">
<title>Manage Employees</title>
<sort_order>0</sort_order>
<action>employee/adminhtml_employee</action>//指向Controller里的action
</items>//若想加入多个子元素可写<item2></item2>之类
</children>
</employee>
</menu>
</adminhtml>
  ....
</config>

如果这时候刷新的话就会报错

Warning: include(Mage\Employee\Helper\Data.php): failed to open stream: 
嘛,根据提示是没有上面这个文件,于是继续在config.xml中加入配置
<config>
...
<global>
<helpers>//这一段配置是导入Helper
<employee>
<class>Jago_Employee_Helper</class>
</employee>
</helpers>
</global>
...
</config>

然后就是建立上面目录中的Data.php文件了,代码如下:

class Jago_Employee_Helper_Data extends          
Mage_Core_Helper_Abstract
{ }

现在刷新就可以在上方导航条中看见新建的目录了,不过你点击的话,肯定是404错误。

继续干活:首先是配置路径,告诉magento点菜单要跳到哪里,在config.xml文件下

<config>
...
<frontend>
<routers>
<employee>
<use>standard</use>
<args>
<module>Jago_Employee</module>
<frontName>employee</frontName>
</args>
</employee>
</routers>
</frontend>
...
</config>

路径是配完后,往controllers目录下的EmployeeController.php加入如下代码

class Jago_Employee_Adminhtml_EmployeeController extends Mage_Adminhtml_Controller_action{
public function indexAction() {
//$this->loadLayout();
//$this->renderLayout(); 注释是因为
echo "啊呜~";
}
}

OK,至少是可以看到他已经工作了。

工作进入第2部分,加入模板

如果你把我注释那段不注释掉的话,就会发现,其实是有一层模板的,好吧,主要是因为我怕找不到输出的那段。

在config.xml中

<adminhtml>//加入到这个标签下
...
<layout>
<updates>
<employee>
<file>employee.xml</file>
</employee>
</updates>
</layout>
...
</adminhtml>

声明了这么一个模板文件,我们需要在app/design/adminhtml/default/default/layout/下创建employee.xml

<layout version="0.1.0">
<employee_adminhtml_employee_index> //声明作用域,就是controllers下面那个index函数
<reference name="content">
<block type="employee/adminhtml_employee" name="employee">//声明调用哪个Block,所以下面就该建一个Block了
</block></reference>
</employee_adminhtml_employee_index>
</layout>

找到Block/Adminhtml/Employee.php

class Jago_Employee_Block_Adminhtml_Employee extends Mage_Adminhtml_Block_Widget_Grid_Container{
public function __construct(){
$this->_controller = 'adminhtml_employee';
$this->_blockGroup = 'employee';
/**
上面2个参数主要是定位我们即将要写的Grid文件
在它的父类中有个_prepareLayout() 方法
它会将上面的2个变量设置成$this->_blockGroup.'/' . $this->_controller . '_grid'
//即
employee/adminhtml_employee_grid */
$this->_headerText = Mage::helper('employee')->__('Employee M');
$this->_addButtonLabel = Mage::helper('employee')->__('Add');
parent::__construct();
}
}

然后在Block/Adminhtml/Employee/Grid.php

class Jago_Employee_Block_Adminhtml_Employee_Grid extends Mage_Adminhtml_Block_Widget_Grid {
public function __construct(){
parent::__construct();
      // HTML 代码中的 <div> 标签中 ID 的值,你在同一个页面中应用多个Grid表时,ID 的值必须是唯一
$this->setId('employeeGrid');
    //设置默认排序的列
$this->setDefaultSort('id');
    //默认的排序顺序,ASC(正序)或 DESC(倒序)
$this->setDefaultDir('ASC');
    //这个设置用来保存你在 Grid 表中所做的操作到 Session 中, 比如说你在 Grid 表分页中的第2页或做了一些搜索筛选操作,当你刷新页面或返回到该页面时,你刚所做的操作依然存在, 页面不会返回到初始值或状态
$this->setSaveParametersInSession(true);
}
protected function _prepareCollection()
{
$collection = Mage::getModel('employee/employee')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
} protected function _prepareColumns()
{
$this->addColumn('id', array(
'header' => Mage::helper('employee')->__('ID'),//是列显示的名称
'align' => 'right',
'width' => '10px',
'index' => 'id',//是来自于我们 Collection 中的一个字段,这个“id”列是存在于我们 Collection 的模块中。
)); $this->addColumn('name', array(
'header' => Mage::helper('employee')->__('Name'),
'align' => 'left',
'index' => 'name',
'width' => '50px',
)); $this->addColumn('content', array(
'header' => Mage::helper('employee')->__('Description'),
'width' => '150px',
'index' => 'content',
)); return parent::_prepareColumns();
}
}

继续回到配置文件config.xml去声明一下块(Block)文件

<global>
...
<blocks>
<employee>
<class>Jago_Employee_Block</class>
</employee>
</blocks>
...
<global>

这时刷新就会报错了

Warning: include(Mage\Employee\Model\Employee.php): failed to open stream:

原因是缺少Model,还是在config.xml下声明Model

<global>
...
<models>
<employee>
<class>Jago_Employee_Model</class>
<resourceModel>employee_mysql4</resourceModel>//也是后面用的
</employee>
//下面这一段是与数据库相关联的操作,后面会用到,可以先不写
<employee_mysql4>
<class>Jago_Employee_Model_Mysql4</class>
<entities>
<employee>
<table>test</table>//填的是数据库的表名
</employee>
</entities>
</employee_mysql4>
</models>
...
<global>

然后在Model/Employee.php下

class Jago_Employee_Model_Employee extends Mage_Core_Model_Abstract{
public function _construct() {
parent::_construct();
$this->_init('employee/employee');//这一段是与Block/Adminhtml/Employee/Grid.php中的_prepareCollection()里的设置相对应,不写的话会报错,你可以去掉看看效果
} }

这时候刷新的话,页面已经出来了,不过渲染出来的只有Block/Adminhtml/Employee.php,而最重要的Grid.php却没有出来。

问题是出在数据库的连接上。

进入Model/Mysql4/Employee.php

class Jago_Employee_Model_Mysql4_Employee
extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
$this->_init('employee/employee', 'id');
}
}

进入Model/Mysql4/Employee/Collection.php

class Jago_Employee_Model_Mysql4_Employee_Collection
extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('employee/employee');
}
}

做完以上这些,你会发现还是不可以,因为数据库里根本就没有test这个表,继续加

在config.xml中

<global>
...
<resources>//数据库安装操作
<employee_setup>
<setup>
<module>Jago_Employee</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</employee_setup>
<employee_write>
<connection>
<use>core_write</use>
</connection>
</employee_write>
<employee_read>
<connection>
<use>core_read</use>
</connection>
</employee_read>
</resources>
...
</global>

在sql/employee_setup/mysql4-install-1.0.0.php

$installer = $this;
$installer->startSetup();
$installer->run(" -- DROP TABLE IF EXISTS {$this->getTable('test')};
CREATE TABLE {$this->getTable('test')} (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`content` text NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; "); $installer->endSetup();

ok,这时候页面出来的效果该是这样的

先就这样了,剩下的部分请自行参考博客:

http://www.sunzhenghua.com/magento-admin-module-development-part2-grid-forms-tabs-addbutton

magento后台开发学习笔记(入门实例向)的更多相关文章

  1. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  2. 步步为营 SharePoint 开发学习笔记系列总结

    转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...

  3. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  4. Chrome扩展,应用开发学习笔记之2---恶搞百度一下

    Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...

  5. 转载:使用Xilinx IP核进行PCIE开发学习笔记(一)简介篇

    https://zhuanlan.zhihu.com/p/32786076 最近接触到一个项目,需要使用PCIE协议,项目要求完成一个pcie板卡,最终可以通过电脑进行通信,完成电脑发送的指令.这当中 ...

  6. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  9. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

随机推荐

  1. Codeforces704B. Ant Man

    n<=5000个数轴上的点,有属性x,a,b,c,d,从i跳到j的代价如下: 问从s跳到t的最小代价. 方法?:先构造s->t链,然后依次插入其他点,每次选个最佳的位置.过了这题,正确性不 ...

  2. ArrayAdapter的使用

    package com.pingyijinren.test; import android.content.Context; import android.view.LayoutInflater; i ...

  3. hdu - 1113 Word Amalgamation (stl)

    http://acm.hdu.edu.cn/showproblem.php?pid=1113 给定一个字典,然后每次输入一个字符串问字典中是否有单词与给定的字符串的所有字母一样(顺序可以打乱),按字典 ...

  4. 测试使用markdonw写博客

    # 欢迎使用 Cmd Markdown 编辑阅读器 ------ 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,**Cmd Markdown** 是我们给出的 ...

  5. tornado的http服务器实现

    使用tornado实现的一个简单http服务器:只需要定义自己的处理方法,其他的东西全部交给tornado完成. #coding:utf-8 import tornado.httpserver imp ...

  6. python 区块链程序

    python 区块链程序 学习了:https://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247484921&idx=1& ...

  7. 华为OJ1964-求解立方根(牛顿迭代法)

    一.题目描述 描述: 计算一个数字的立方根,不使用库函数. 函数原型double getCubeRoot(double input) 输入: 待求解参数 double类型 输出: 输出参数的立方根,保 ...

  8. Mariadb galera 集群

    部署galera 多主架构 (galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性.) 环境准备:三台服务器 ...

  9. MySQL中文參考手冊

    非常好的中文手冊: 链接:http://www.sdau.edu.cn/support/mysq_doc/manual_toc.html

  10. DNNClassifier 深度神经网络 分类器

    An Example of a DNNClassifier for the Iris dataset. models/premade_estimator.py at master · tensorfl ...