phpcms 模块开发(一)
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-24 16:03:26 浏览: 评论:0
首先分析一个可安装卸载的正常模块 以dianping模块(点评)为例:phpcms/modules/dianping/:
- classes/ 与本模块相关的类文件
- function/ 与本模块相关的函数文件
- install/ 本模块安装相关
- language/ 本模块相关语言包
- templates/ 本模块前台模板
- config.inc.php 本模块的安装信息
- dianping.sql 创建dianping表的sql文件
- dianping_data.sql 创建dianping_data表的sql文件
- dianping_type.sql 创建dianping_type表的sql文件
- extention.inc.php 模块设置 插入的是menu表 负责控制后台方法访问的路径
- model.php 检查所需要的phpcms/model/下的文件和所需要的sql文件
- module.sql 在module表添加此模块
- template/ 本模块后台模板
- uninstall/ 本模块卸载相关
- dianping.sql 删除dianping表的sql文件
- dianping_data.sql 删除dianping_data表的sql文件
- dianping_type.sql 删除dianping_type表的sql文件
- extention.inc.php 模块设置 删除的是menu表里该模块的数据
- model.php 所需要的执行删除的sql文件名数组
- dianping.php 后台访问文件
- index.php 前台访问文件
- 当然还可以配个说明文档
- about_dianping.txt
- /---------------------------------------------------------------------/
我平常做开发的时候喜欢用dianping模块作为参考来进行修改,所以就以自己的经验写下面的东西.
首先把phpcms/module/dianping文件夹原地复制粘贴一份,假设我们开发一个后台日程管理模块,目录命名为schedule.
1. 复制出来的dianping文件夹改名为schedule
2. 打开schedule/install/下的所有文件进行修改吧(顺序个人喜好)
(1)先忽略语言包(language)和前台模板(template),修改config.inc.php文件,这个文件写的是安装信息,如果不存在就连安装的按钮都没得点.
里面需要修改的地方:
- $module = 'schedule';//模块名,就是地址栏的m
- $modulename = '日程管理模块';//名称
- $introduce = '这是一个日程管理模块';//介绍
- $author = 'Shawn';//作者
- $authorsite = 'http://weibo.com/yellowshit';//作者网站
- $authoremail = '';//作者邮箱
保存;
(2)确定自己需要用到多少个表?多少个表就需要有多少个sql文件;文件名即为表名.如果不需要用到表,可以用SQL文件.这里做例子就用dianping.sql进行修改,首先先改改文件名, 改为schedule.sql, 打开里面需要修改的地方:
- DROP TABLE IF EXISTS `phpcms_schedule`;//一定要改这里, 你懂什么是droptable的
- CREATE TABLE `phpcms_schedule` (
- `id` int(10) NOT NULLAUTO_INCREMENT,//主键
- `stime` int(10) NOT NULL,//日期
- `content` text NOT NULL,//内容
- PRIMARY KEY (`id`)
- ) TYPE=MyISAM;//引擎可以改可以不改,
有人可能问,我的表前缀的设置不是phpcms_,需不需要改成自己的表前缀?回答是不用的,v9在安装模块时会自动转为你的系统所设置的表前缀..
保存;
(3)打开extention.inc.php, 里面的代码运行后会修改menu表,同时控制外部对后台模块方法的访问,里面需要修改的地方:
- //第一条为该模块的位置, 可以看出parentid=29是写死的,parentid=29代表该模块属于id=29的那个模块的子模块(id=29就是'模块'这个模块,所以安装后会出现在'模块'下),m,c,a则是访问该方法的路径,data还没研究,留空没问题,listorder为排序,没什么用,display为是否改链接是否显示在头部(1为显示0为不显示)
- //insert方法有第二个参数,默认为false,若为true则返回插入的id,第一条数据用了true是为了下面的parentid能够跟这个模块关联
- //列表方法
- $parentid =$menu_db->insert(array('name'=>'schedule','parentid'=>29, 'm'=>'schedule','c'=>'schedule', 'a'=>'init','data'=>'', 'listorder'=>0,'display'=>'1'), true);
- //日程添加方法
- $menu_db->insert(array('name'=>'schedule_add','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_add', 'data'=>'','listorder'=>0,'display'=>'0'));
- //日程编辑方法
- $menu_db->insert(array('name'=>'schedule_edit','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_edit', 'data'=>'','listorder'=>0,'display'=>'1'));
- //日程删除方法
- $menu_db->insert(array('name'=>'schedule_del','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'schedule_del', 'data'=>'','listorder'=>0,'display'=>'1'));
- //语言包相关, 模块安装后在phpcms/languages/zh-cn/system_menu.lang.php中可以见到
- $language = array('schedule'=>'日程管理','schedule_add'=>'添加日期','schedule_edit'=>'修改日程','schedule_del'=>'删除日程');
这个文件的重要性:告知系统这个模块有多少个方法可供页面访问,就是m,c,a的控制..
假设我在模块schedule中的控制器schedule.php有方法 happy(),我们如果访问的话就是m=schedule&c=schedule&a=happy,但是! 如果menu表没有记录到这个方法的话就无法通过地址来访问, 这时我们需要加上一句$menu_db->insert(array('name'=>'schedule_del','parentid'=>$parentid,'m'=>'schedule', 'c'=>'schedule','a'=>'happy','data'=>'', 'listorder'=>0,'display'=>'1'));即可..
这里我们又产生一个问题,如果我的模块已经安装了,我在开发的时候突然需要添加额外的方法来访问,难道要卸载模块在改这个文件再重新安装吗? 答案是否定的,我们已经知道它是对menu表的操作,我们改就手动在menu表增加吧.tips:如果开发够熟悉, 模块安装过程可以跳过,直接自己改数据表来进行安装就可以(我是这么做的..)
我所说的外部访问说的是URL的访问控制器方法,如果在控制器内内部的方法调用内部的方法是不用这么做的(有点绕).
Tags: PHPCMS模块开发 PHPCMS开发模块
- 上一篇:PHPCMS常用代码
- 下一篇:phpcms 模块开发(二)
相关文章
- ·PHPCMS模块开发基本步骤(2014-10-21)
- ·phpcms 模块开发(二)(2014-10-24)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)