简介:

在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. 9-slice-scaling

    9-slice-scaling http://rwillustrator.blogspot.com/2007/04/understanding-9-slice-scaling.html

  2. HTML \ XHTML \XML 的区别

    虽然是很简单的知识,但如果总是在需要的时候去查找,不需要的时候就丢掉,未免心里总是觉的不踏实.因为你就像是垃圾收购站,有垃圾(知识)就往里面拖,拖不下了就丢掉一些(忘了).不去整理,也因此也不知道丢的 ...

  3. 关于Xcode7更新之后使用 SDWebImage 图片加载不出来

    解决方法:在Info.plist中添加NSAppTransportSecurity类型Dictionary. 在NSAppTransportSecurity下添加NSAllowsArbitraryLo ...

  4. Linux 运行 apt-get install 就出现jdk installer 错误的解决方法

    解决办法如下: sudo rm /var/lib/dpkg/info/oracle-java7-installer* sudo apt-get purge oracle-java7-installer ...

  5. Java学习注意事项

    一个Java文件中可以包含多个类. 如果有public类,则文件名必须和public类一样. 例如: class Pie { void f(){ System.out.println("Pi ...

  6. UvaLive6662 The Last Ant 模拟

    UvaLive6662 PDF题目 题意:给出隧道长度L,蚂蚁数量N,各蚂蚁位置Pi.前进方向Di,都为整数(前进方向为L或R),蚂蚁速度为1cm每秒,两蚂蚁若在整数点相遇则都反向,若不在整数点相遇则 ...

  7. ie8及其以下浏览器的document.getElementsByClassName兼容性问题

    使用JavaScript访问DOM的一个重大问题是,此过程需要一种通过元素类名称来选择类的类函数,对DOMContentReady,这种类函数的缺失导致开发人员需要自己编写自定义脚本业执行上述任务,许 ...

  8. sql字段中逗号分隔字符串的判断

    例如,数据表t1中有一个字段PlayTheme存放的数值类似如下: 第一行:1,2,12 第二行:22,222,2222 第三行:1,2 第四行:2,12 第五行:2 如果你想取出PlayTheme字 ...

  9. python文件I/O(转)

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  10. ZOJ 2334 Monkey King

    并查集+左偏树.....合并的时候用左偏树,合并结束后吧父结点全部定成树的根节点,保证任意两个猴子都可以通过Find找到最厉害的猴子                       Monkey King ...