phpcms模块开发简易教程
简介:
在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文件.
<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('model', '', 0);//加载model类
class guestbook_model extends model {
function __construct() {
$this->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大体内容类似下面的:
<?php
$LANG['guestbook'] = '留言板';
$LANG['guestbook_name'] = '用户名称';
$LANG['tel'] = '联系电话';
$LANG['email'] = '用户email';
$LANG['title'] = '留言标题';
$LANG['lytime'] = '留言时间';
$LANG['typeid'] = '所属分类';
$LANG['status'] = '状 态';
$LANG['type_id'] = '分类ID';
该lang文件应该会在安装的时候会复制到./phpcms/languages/zh-cn中一份
然后是config.inc.php,这个里面写的是一些关于模块安装时候的信息。
文件里面是这个结构的:
<?php
defined('IN_PHPCMS') or exit('Access Denied');
defined('INSTALL') or exit('Access Denied');
$module = 'guestbook';
$modulename = '留言板';
$introduce = '留言板模块';
$author = 'Jason';
$authorsite = 'http://cnblogs.com/savokiss';
$authoremail = 'jaynaruto@qq.com';
?>
当然以前的信息是开源部落的,我稍微改了一下。
再然后是extention.inc.php,这个文件是用来创建后台管理菜单的目录结构的,也是用来控制权限的
<?php
defined('IN_PHPCMS') or exit('Access Denied');
defined('INSTALL') or exit('Access Denied');
$parentid = $menu_db->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 这个就是你使用了哪些数据模型 可以理解为使用了哪些表
<?php
defined('IN_PHPCMS') or exit('Access Denied');
defined('INSTALL') or exit('Access Denied');
return array('guestbook');
?>
然后是module.sql 这个是用来向系统的module表里面插入数据用的,相当于注册模块
INSERT INTO `phpcms_module` VALUES ('guestbook', '留言板', '', '', '1.0', '', 'array (\n 1 => \n array (\n \'is_post\' => \'1\',\n \'enablecheckcode\' => \'0\',\n ),\n)', '', '', '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 '',
`typeid` smallint(5) unsigned NOT NULL DEFAULT '',
`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 '',
`elite` tinyint(1) unsigned NOT NULL DEFAULT '',
`passed` tinyint(1) unsigned NOT NULL DEFAULT '',
`addtime` int(10) unsigned NOT NULL DEFAULT '',
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
phpcms模块开发简易教程的更多相关文章
- Android开发简易教程
Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- ssm集成(maven)& 分模块开发--详细教程
1 maven版本的ssm 1.1 最简单的版本步骤: (1) 创建maven web项目 (2) 在pom.xml中导入依赖的jar包 (3) 再写配置文件: web.xml <!DOCTYP ...
- phpcms模块开发中的小问题及解决方法
1.模块菜单中文名出错 在编写安装模块时候可能需要更改extention.inc.php中定义中文名称,由于反复安装或者通过phpcms的扩展->菜单管理 修改菜单名会导致中文名失败.解决办法很 ...
- PHPCMS模块开发相关文件
名称 类型说明 Guestbook 模块后台控制器 index 模块前台控制器 Install 安装文件夹 ├templates ├config.inc.php ├extention.inc.php ...
- WPS Office 二次开发简易教程。
http://bbs.wps.cn/forum.php?mod=viewthread&tid=22004642
- Intellj IDEA 简易教程
Intellj IDEA 简易教程 目录 JDK 安装测试 IDEA 安装测试 调试 单元测试 重构 Git Android 其他 参考资料 Java开发IDE(Integrated Developm ...
- 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程
这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉 ...
- Drupal8开发教程:模块开发——创建新页面
之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...
随机推荐
- Redis学习——环境搭建以及基础命令使用
0. 前言: 这篇文章旨在对redis环境的搭建以及对redis有个大概的认识. 一.redis搭建: 环境:ubuntu 14 软件包:redis-3.0.3.tar.gz 安装步骤: 1. 首先解 ...
- OC-ARC
一. 基本简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理, ...
- PHP数组处理函数的使用array_map(三)
/*函数array_map()函数:多数组回调函数---将回调函数作用到给定数组的单元上 * 1.语法:array array_map ( callback callback, array arr1 ...
- Double和double的区别
1.Double是java定义的类,而double是预定义数据类型(8种中的一种)2.Double就好比是对double类型的封装,内置很多方法可以实现String到double的转换,以及获取各种d ...
- php开发工具之火狐浏览器插件
相信做开发的都有一种火狐情怀吧! 下面来介绍下一些自己在php开发工程中用到几个火狐浏览器插件. 1.[firebug]: 这个插件可以说是一个神奇,功能不用过对介绍. 2.[hostAdmin]: ...
- Mastering Web Application Development with AngularJS 读书笔记(一)
第一章笔记 (一) 一.PS:运行时配置IIS <html> <head> <script src="angular.js"></scri ...
- 利用flexbox实现按字符长度排列dom元素
说明:请使用chrome浏览器打开 See the Pen pvyjGV by lilyH (@lilyH) on CodePen. 如上图所示,我们你要实现的效果就是,(1)在一行中显示两块元素:( ...
- URL、Session、Cookies、Server.Transfer、Application和跨页面传送,利弊比较
URL.Session.Cookies.Server.Transfer.Application和跨页面传送.-本题考查面试者对ASP.NET中多页面传值的理解是否全面.因为ASP.NET的页面表单提交 ...
- 微信电话本可免费拨打网络电话 通话一分钟约300K流量
微信电话本新版本于昨日晚间发布,这是一款智能通讯增强软件,通话双方都下载此APP并开通免费通话功能就能使用微信电话本拨打免费网络电话,在对方无法接通情况下还能将音频转向语音信箱,微信电话本目前支持An ...
- jquery选择器(三)-过滤选择器
一.基本过滤选择器 二.内容过滤选择器 1. 包含文本内容为“text”的元素 2. 含有某个选择器所匹配的父元素 3. 包含有子元素或者文本的父元素 4. 不含有子元素或者文本的父元素 三.可见性过 ...