你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

phpcms 模块开发

首先分析一个可安装卸载的正常模块 以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的访问控制器方法, 如果在控制器内内部的方法调用内部的方法是不用这么做的

(3)打开model.php, 该文件也比较重要,安装时会检查数组入面的对应SQL和model文件是否存在,也可以说是一个元素就对应一张数据表和一个model文件(没有数据表就让它返回空数组),
-----------------------------------------------------
return array('schedule');
-----------------------------------------------------
还有一比较坑爹的是需要自己到/phpcms/model/下去添加自己的对应的model文件,去到/phpcms/model/,原地复制黏贴一份dianping_model.php(继续参考),改名为schedule_model.php,打开..

  (4)打开module.sql, 该文件插入的事module表, 照改,最重要改的事前两个值
-----------------------------------------------------
INSERT INTO `phpcms_module` VALUES ('schedule', '日程管理模块', '', '0','1.0', '', ' ', '0', '0', '2011-06-26', '2011-06-26');
-----------------------------------------------------
  (5)回到language和template两个文件夹, language负责的是模块语言包,按照格式改就行, 如果你确定你做的模块根本不需要多国语言, 那就不用写了.. template负责的事前台模板,如果模块只负责后台的运作, template也可以不改; 安装后模块的前台模板会出现在当前风格的下面,例如/templates/schedule/下面.

3.回到模块根目录schedule/ , 打开uninstall里面的文件,这个文件夹就是模块卸载所用和安装部分的大同小异..
做到这一步就可以去安装了, 登陆后台, 选择模块->模块管理,在右边就会看到自己的模块, 点击安装, 成功~


就可以开始写功能了~~~