简介:

在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. %1 不是有效的Win32应用程序

    用 64bit 的 Python 调用 32bit 的 Dll 会出错

  2. C# Pointer types

    https://msdn.microsoft.com/en-us/library/y31yhkeb.aspx

  3. 在项目中那个少用if else 语句,精简代码,便于维护的方法(1)

    一般我在写一个函数的时候,可能需要一个回调函数,例如: function loadQtipCode(dom, title, content, width, showcb, hidecb) { $(do ...

  4. Mac下切换bash

    MAC下的终端是神器,安装ZSH后,突然间发现太不好操作了,即使再配上oh-my-zsh也感觉不爽. 然后想删除,自己尝试了下找不到命令删除,于是在网上找找,但是也没找到.最后直接进隐藏文件夹,直接一 ...

  5. xenserver安装使用

    1.下载参考:http://blog.sina.com.cn/s/blog_61c07ac50102vf55.html 2.安装(个人笔记本配置了12G的内存,所以在VM Workstation 11 ...

  6. Jbuilder 2008安装及破解

    1.下载Jbuilder及破解包 2.安装: 1>点击install 2> 选择第一项: 3>同意协议: 4>选择安装目录 5>选择服务器 6>选择默认 7> ...

  7. 让Xcode的控制台支持LLDB类型的打印

    这个技巧个人认为非常有用 当Xcode在断点调试的时候,在控制台中输入 po self.view.frame 类似这样的命令会挂掉,不信可以亲自去试试(Xcode7 以后支持LLDB类型的打印) 那么 ...

  8. 小技能——markdown

    如果常常要在电脑上写点东西,比如写笔记.做总结.写博客之类的,花一两个小时学会markdown还是很值的. markdown简介 markdown不是某个软件,而是一种标记语言,标记普通文本的格式,以 ...

  9. 【10-25】OOP基础-飞机游戏知识点

    知识点 鼠标适配器类为抽象类,使用匿名子类实现鼠标事件的重写,创建一个鼠标适配器对象 添加鼠标事件监听器到JPanel对象实现鼠标的响应 创建定时器Timer对象,在定时器的任务列表方法schedul ...

  10. DWZ框架中ajax提交文件表单的处理(关闭当前dialog + 刷新父级navTab)

    先重点关注两个js文件:dwz.ajax.js和dwz.core.js 流程: 1.回调iframeCallback <form xx enctype="multipart/form- ...