简介:
在phpcms中,各个功能是以模块为单位定义的(对应modules目录),如果需要新增功能最好的办法就是开发一个模块,然后复制到phpcms目录下,然后进入后台安装即可。
官方说明:
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m示例:http://www.yourname.com/index.php?m=content那么您访问的就是phpcms/modules/content 这个模块。如果创建一个,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
开发步骤:
1.建立目录结构:
我们要开发的东东(也就是模块)就在/phpcms/modules/下面
如果没有什么特别的,在开发一个模块之前先要按照目录结构建立好相关目录并且设计好数据库表结构。下面拿开源部落开发的一个留言板模块guestbook讲解一下
下面是guestbook模块下的目录结构:
guestbook --classes //这个是mytest模块会用到的类 --guestbook_tag.class.php//可能是用来生成前台模板引擎标签的,目前暂不讨论 --functions//guestbook模块用到的函数 --global.func.php//目前里面没有东西 --install//安装此模块需要的一些配置文件和建立数据表mysql语句什么的在这里 --language//多语言的时候会用到 --zh-cn//语言包文件夹 --guestbook.lang.php//多语言文件 --config.inc.php//这个配置文件是用来描述整个模块的一些信息 --extention.inc.php//这个是创建目录结构 .这个文件也用来控制权限 --model.php//模块使用了哪些数据模型.(可以理解为使用了哪些表.) --module.sql//这个向数据库里面modules插入模块的记录 --guestbook.sql//这个文件在安装的时候会被执行,把建立数据库表的sql放进来 --templates //guestbook模块用到的后台模板文件 --uninstall //卸载模块时候用到的配置和文件guestbook.php //这个是guestbook模块的后台控制器文件`index.php//这个是前台的控制器
2.建立数据模型
建立完一个这样的结构后 我们还需要在/phpcms/model/下面建立我们的数据模型
例如 guestbook_model.class.php (这个使用了很典型的工厂模式)
具体每个文件里面写了些什么.我们一个一个来看 .首先来看我们在model文件夹下面建立guestbook_model.class.php文件.
db_config = pc_base::load_config('database');//加载数据库配置文件 $this->db_setting = 'default';//默认的数据库配置.//多个库的话可以在这里选库 $this->table_name = 'guestbook';//表名称,不用加表前缀 parent::__construct(); } }?>
第一行的作用是确定是不是在phpcms的运行框架内.
第二行加载系统的model类,后面的参数0的意思是并不实例化.
最后一行调用了父类的构造方法.可以在phpcms/libs/classes/model.class.php中找到
而这个model类里面定义了很多对数据的操作方法,最基本的增删改查。以后我再详细说说model基本的一些方法。
3.编写modules中的文件
接着来看看modules/install 里面的东东
第一个language文件夹是用来支持多语言菜单的。
该留言板模块只有一个zh-cn文件夹,里面的guestbook.lang.php大体内容类似下面的:
该lang文件应该会在安装的时候会复制到./phpcms/languages/zh-cn中一份
然后是config.inc.php,这个里面写的是一些关于模块安装时候的信息。
文件里面是这个结构的:
当然以前的信息是开源部落的,我稍微改了一下。
再然后是extention.inc.php,这个文件是用来创建后台管理菜单的目录结构的,也是用来控制权限的
insert(array('name'=>'guestbook', 'parentid'=>29, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'init', 'data'=>'', 'listorder'=>0, 'display'=>'1'), true);$menu_db->insert(array('name'=>'add_guestbook', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'add', 'data'=>'', 'listorder'=>0, 'display'=>'0'));$menu_db->insert(array('name'=>'edit_guestbook', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'edit', 'data'=>'', 'listorder'=>0, 'display'=>'0'));$menu_db->insert(array('name'=>'delete_guestbook', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'delete', 'data'=>'', 'listorder'=>0, 'display'=>'0'));$menu_db->insert(array('name'=>'guestbook_setting', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'setting', 'data'=>'', 'listorder'=>0, 'display'=>'1'));$menu_db->insert(array('name'=>'add_type', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'add_type', 'data'=>'', 'listorder'=>0, 'display'=>'1'));$menu_db->insert(array('name'=>'list_type', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'list_type', 'data'=>'', 'listorder'=>0, 'display'=>'1'));$menu_db->insert(array('name'=>'check_register', 'parentid'=>$parentid, 'm'=>'guestbook', 'c'=>'guestbook', 'a'=>'check_register', 'data'=>'', 'listorder'=>0, 'display'=>'1'));$language = array('guestbook'=>'留言板', 'edit_guestbook'=>'编辑留言板', 'delete_guestbook'=>'删除留言板', 'guestbook_setting'=>'模块配置', 'add_type'=>'添加类别', 'list_type'=>'分类管理', 'check_register'=>'审核申请');?>
文件最后那个language数组,是用来插入系统的language\zh-cn\system_menu.lang.php里面的
然后是model.php 这个就是你使用了哪些数据模型 可以理解为使用了哪些表
然后是module.sql 这个是用来向系统的module表里面插入数据用的,相当于注册模块
INSERT INTO `phpcms_module` VALUES ('guestbook', '留言板', '', '0', '1.0', '', 'array (\n 1 => \n array (\n \'is_post\' => \'1\',\n \'enablecheckcode\' => \'0\',\n ),\n)', '0', '0', '2011-02-22', '2010-02-22');
然后是guestbook.sql 建立你数据库表的语句应该写在这个文件里面
DROP TABLE IF EXISTS `phpcms_guestbook`;CREATE TABLE `phpcms_guestbook` ( `guestid` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `siteid` smallint(5) unsigned DEFAULT '0', `typeid` smallint(5) unsigned NOT NULL DEFAULT '0', `name` varchar(50) NOT NULL DEFAULT '', `tel` varchar(50) NOT NULL DEFAULT '', `email` varchar(100) NOT NULL DEFAULT '', `title` varchar(100) NOT NULL DEFAULT '', `introduce` text NOT NULL, `username` varchar(30) NOT NULL DEFAULT '', `listorder` smallint(5) unsigned NOT NULL DEFAULT '0', `elite` tinyint(1) unsigned NOT NULL DEFAULT '0', `passed` tinyint(1) unsigned NOT NULL DEFAULT '0', `addtime` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`guestid`), KEY `typeid` (`typeid`,`passed`,`listorder`,`guestid`)) TYPE=MyISAM;
接着就是你所使用的后台模板 应该放在templates里面 命名的规则应该是guestbook_***.tpl.php
我的模板比较多就不贴代码了
最后是控制器,index.php和guestbook.php,其中index.php是前台控制器,guestbook.php是后台控制器
控制器里面是针对你每个url传递过来的action也就是a=?的动作.默认动作是init
留言板模块下载地址:
本文大部分内容参考自:http://www.3lian.com/edu/2013/04-27/67466.html