目的是做一个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. 守卫者的挑战(codevs 1997)

    题目描述 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如 ...

  2. 封装java-get-post请求方式

    package com.ecar.eoc.content.platform.utils; import java.io.IOException;import java.util.HashMap;imp ...

  3. 从零开始写STL—栈和队列

    从零开始写STL-栈和队列 适配器模式 意图:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决:主要解决在软件系统中,常常要将 ...

  4. JSP的会话(Session)跟踪

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/session-tracking.html: 会话(Session) HTTP是一个“无状态”协议,这意味 ...

  5. centos下性能分析工具perf的安装和简单使用

    1.安装: cat /etc/redhat-releaseCentOS release 6.6 (Final) sudo yum install perf 2.

  6. STL中常用的c++语法

    函数调用操作(c++语法中的左右小括号)可以被重载,STL的特殊版本都以仿函数形式呈现.如果对某个class进行operator()重载,它就成为一个仿函数. 仿函数(functor),就是使一个类的 ...

  7. 008 frame relay

    Router>en Router#config t Enter configuration commands, one per line.  End with CNTL/Z. Router(co ...

  8. 通过uri呼起本地app

    1.在Android本地app清单文件里配置 <activity android:name="com.mdj.ui.WelcomeActivity" android:scre ...

  9. Visual Studio静态编译

    1.Visual Studio静态编译设置: [Project]-[prj_name Properties],按例如以下框设置 2.why配置成静态编译? 假设动态编译,在没有安装Visual Stu ...

  10. SRM598 Div1

    这次直接进到div1里面搞了,不过div1果然难度要高一些 第一题直接贪心算法了... 先排序,然后判断是否三个小于100,然后2个,最后一个 第二题看错了输入数据,理解错了题意,失误 第三题比较难办 ...