当前位置:首页 > CMS教程 > phpcms > 列表

phpcms 模块开发(一)

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-24 16:03:26 浏览: 评论:0 

首先分析一个可安装卸载的正常模块 以dianping模块(点评)为例:phpcms/modules/dianping/:

  1.   classes/ 与本模块相关的类文件 
  2.    function/ 与本模块相关的函数文件 
  3.    install/ 本模块安装相关 
  4.       language/ 本模块相关语言包 
  5.       templates/ 本模块前台模板 
  6.       config.inc.php  本模块的安装信息 
  7.       dianping.sql  创建dianping表的sql文件 
  8.       dianping_data.sql 创建dianping_data表的sql文件 
  9.       dianping_type.sql 创建dianping_type表的sql文件 
  10.       extention.inc.php 模块设置 插入的是menu表 负责控制后台方法访问的路径 
  11.       model.php 检查所需要的phpcms/model/下的文件和所需要的sql文件 
  12.       module.sql 在module表添加此模块 
  13.    template/ 本模块后台模板 
  14.    uninstall/ 本模块卸载相关 
  15.       dianping.sql  删除dianping表的sql文件 
  16.       dianping_data.sql 删除dianping_data表的sql文件 
  17.       dianping_type.sql 删除dianping_type表的sql文件 
  18.       extention.inc.php 模块设置 删除的是menu表里该模块的数据 
  19.       model.php 所需要的执行删除的sql文件名数组 
  20. dianping.php 后台访问文件 
  21. index.php 前台访问文件 
  22. 当然还可以配个说明文档 
  23. about_dianping.txt 
  24.  
  25. /---------------------------------------------------------------------/ 

我平常做开发的时候喜欢用dianping模块作为参考来进行修改,所以就以自己的经验写下面的东西.

首先把phpcms/module/dianping文件夹原地复制粘贴一份,假设我们开发一个后台日程管理模块,目录命名为schedule.

1. 复制出来的dianping文件夹改名为schedule

2. 打开schedule/install/下的所有文件进行修改吧(顺序个人喜好)

(1)先忽略语言包(language)和前台模板(template),修改config.inc.php文件,这个文件写的是安装信息,如果不存在就连安装的按钮都没得点.

里面需要修改的地方:

  1. $module = 'schedule';//模块名,就是地址栏的m 
  2. $modulename = '日程管理模块';//名称 
  3. $introduce = '这是一个日程管理模块';//介绍 
  4. $author = 'Shawn';//作者 
  5. $authorsite = 'http://weibo.com/yellowshit';//作者网站 
  6. $authoremail = '';//作者邮箱 

保存;

 (2)确定自己需要用到多少个表?多少个表就需要有多少个sql文件;文件名即为表名.如果不需要用到表,可以用SQL文件.这里做例子就用dianping.sql进行修改,首先先改改文件名, 改为schedule.sql, 打开里面需要修改的地方:

  1. DROP TABLE IF EXISTS `phpcms_schedule`;//一定要改这里, 你懂什么是droptable的 
  2. CREATE TABLE `phpcms_schedule` ( 
  3.   `id` int(10) NOT NULLAUTO_INCREMENT,//主键 
  4.   `stime` int(10) NOT NULL,//日期 
  5.   `content` text NOT NULL,//内容 
  6.   PRIMARY KEY (`id`) 
  7. ) TYPE=MyISAM;//引擎可以改可以不改, 

有人可能问,我的表前缀的设置不是phpcms_,需不需要改成自己的表前缀?回答是不用的,v9在安装模块时会自动转为你的系统所设置的表前缀..

保存;

(3)打开extention.inc.php, 里面的代码运行后会修改menu表,同时控制外部对后台模块方法的访问,里面需要修改的地方:

  1. //第一条为该模块的位置, 可以看出parentid=29是写死的,parentid=29代表该模块属于id=29的那个模块的子模块(id=29就是'模块'这个模块,所以安装后会出现在'模块'下),m,c,a则是访问该方法的路径,data还没研究,留空没问题,listorder为排序,没什么用,display为是否改链接是否显示在头部(1为显示0为不显示) 
  2. //insert方法有第二个参数,默认为false,若为true则返回插入的id,第一条数据用了true是为了下面的parentid能够跟这个模块关联 
  3. //列表方法 
  4. $parentid =$menu_db->insert(array('name'=>'schedule','parentid'=>29, 'm'=>'schedule','c'=>'schedule''a'=>'init','data'=>'''listorder'=>0,'display'=>'1'), true); 
  5.  
  6. //日程添加方法 
  7. $menu_db->insert(array('name'=>'schedule_add','parentid'=>$parentid,'m'=>'schedule''c'=>'schedule','a'=>'schedule_add''data'=>'','listorder'=>0,'display'=>'0')); 
  8.  
  9. //日程编辑方法 
  10. $menu_db->insert(array('name'=>'schedule_edit','parentid'=>$parentid,'m'=>'schedule''c'=>'schedule','a'=>'schedule_edit''data'=>'','listorder'=>0,'display'=>'1')); 
  11.  
  12. //日程删除方法 
  13. $menu_db->insert(array('name'=>'schedule_del','parentid'=>$parentid,'m'=>'schedule''c'=>'schedule','a'=>'schedule_del''data'=>'','listorder'=>0,'display'=>'1')); 
  14.  
  15. //语言包相关, 模块安装后在phpcms/languages/zh-cn/system_menu.lang.php中可以见到 
  16. $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开发模块

分享到:

相关文章