phpcms 模块开发(一)

来源:互联网 发布:七天网络查分注册入口 编辑:程序博客网 时间:2024/05/05 02:22
首先分析一个可安装卸载的正常模块 以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的访问控制器方法, 如果在控制器内内部的方法调用内部的方法是不用这么做的(有点绕)
原创粉丝点击