简介:

在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模块开发简易教程的更多相关文章

  1. Android开发简易教程

    Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...

  2. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  3. ssm集成(maven)& 分模块开发--详细教程

    1 maven版本的ssm 1.1 最简单的版本步骤: (1) 创建maven web项目 (2) 在pom.xml中导入依赖的jar包 (3) 再写配置文件: web.xml <!DOCTYP ...

  4. phpcms模块开发中的小问题及解决方法

    1.模块菜单中文名出错 在编写安装模块时候可能需要更改extention.inc.php中定义中文名称,由于反复安装或者通过phpcms的扩展->菜单管理 修改菜单名会导致中文名失败.解决办法很 ...

  5. PHPCMS模块开发相关文件

    名称 类型说明 Guestbook 模块后台控制器 index 模块前台控制器 Install 安装文件夹 ├templates ├config.inc.php ├extention.inc.php ...

  6. WPS Office 二次开发简易教程。

    http://bbs.wps.cn/forum.php?mod=viewthread&tid=22004642

  7. Intellj IDEA 简易教程

    Intellj IDEA 简易教程 目录 JDK 安装测试 IDEA 安装测试 调试 单元测试 重构 Git Android 其他 参考资料 Java开发IDE(Integrated Developm ...

  8. 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程

    这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉 ...

  9. Drupal8开发教程:模块开发——创建新页面

    之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...

随机推荐

  1. xcode 不显示占用内存

    解决办法: Scheme设置中,将 Enable Zombie Objects 勾选去掉.

  2. (转载)iOS UILabel自定义行间距时获取高度

    本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...

  3. xss利用和检测平台

    xssing 是安全研究者Yaseng发起的一个基于 php+mysql的 网站 xss 利用与检测开源项目,可以对你的产品进行黑盒xss安全测试,可以兼容获取各种浏览器客户端的网站url,cooki ...

  4. 部署Redis for Windows服务

    一.环境 Redis Windows 版本:2.8.2104 二.植入Windows服务    > redis-server.exe --service-install redis.window ...

  5. JMX整理

    阅读目录 Standard MBean与MXBean的区别 实现 Notification 认证与授权 JConsole Custom Client What and Why JMX JMX的全称为J ...

  6. Xcode常用技巧(1)-使用Xcode进行代码分析及GDB调试

    1. 使用Xcode分析代码,分析分为静态分析及动态分析 静态分析:(Xcode-Product-Analyze)  检测代码是否有潜在的内存泄露  编译器认为不太合适的代码 运行结果: 若程序有 ...

  7. strtr函数的用法

    http://php.net/manual/en/function.strtr.php <?php $trans = array("h" => "-" ...

  8. Java字节流:FilterInputStream FilterOutputStream

    ----------------------------------------------------------------------------------- FilterInputStrea ...

  9. PHP简单漂亮的分页类

    本文介绍一款原生的PHP分页类,分页样式有点类似bootstrap. <?php /* * ********************************************* * @类名 ...

  10. 大熊君大话NodeJS之------Net模块

    一,开篇分析 从今天开始,我们来深入具体的模块学习,这篇文章是这个系列(大熊君大话NodeJS)文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中, 对NodeJS也有一个基本的认识,没事 ...