简介:

在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. C++ Pointer-to-Member Selector

    http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm https://m ...

  2. ecshop团购显示“库存不足”

    产生原因:是因为产品设置了多属性 解决办法:打开group_buy.php 第 267行找到 empty($product_info) ? $product_info = array(, ) : '' ...

  3. LeetCode —— Invert Binary Tree

    struct TreeNode* invertTree(struct TreeNode* root) { if ( NULL == root ) { return NULL; } if ( NULL ...

  4. CURL常用命令--update20151015

    下载单个文件,默认将输出打印到标准输出(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名的 ...

  5. [转]Sql按年份.月份.每天统计数量

    1.每年 select year(ordertime) 年, sum(Total) 合计 from 表 group by year(ordertime) 2.每月 select year(ordert ...

  6. p命名空间的使用(不推荐用)

    xmlns:p="http://www.springframework.org/schema/p" p:没有xsd文件,直接加上面那句就好了 <!-- singleton和p ...

  7. SQL having 子句

    1.为什么存在? 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 2.举例子: SELECT Customer,SUM(OrderPrice) FROM Or ...

  8. svn branch and merge(svn切换分支和合并)详解

    下文的实践主要是参考了TortoiseSVN的帮助文档和Subversion的在线文档,Subversion的在线文档:http://svnbook.red-bean.com/en/1.5/svn-b ...

  9. 用jquery写循环播放div的相关笔记 珍贵的总结 -1

    用jquery写循环播放div line-height应用的元素的 层次? line-heig字ht, 叫行高, 仅仅是指 文/文本, 而不管图片. line-height是容器中 文本行 与 文本行 ...

  10. java.lang.Class

    java.lang.Class 一.Class类是什么 Class是一个类,位于java.lang包下. 在Java中每个类都有一个相对应的Class类的对象,换句话说:Java程序在启动运行时 一个 ...