php笔记之:初探PHPcms模块开发介绍


Posted in PHP onApril 26, 2013

由于工作关系,只能暂时放弃对mongodb的研究了 .开始研究PHPcms .

目前为止我已经基本完成了模块的开发.趁着周末来这里做个总结.我发现phpcms写的还不错,不过文档什么的确实不多.

不说废话了.对于phpcms的模块开发.首先要了解模块的目录结构.

我们可以在http://v9.help.phpcms.cn/html/2010/structure_0928/69.html

找到他的目录结构   我们要开发的东东(也就是模块)就在/phpcms/modules/下面

如果没有什么特别的 在开发一个模块之前先要按照目录结构建立好相关目录并且设计好数据库表结构 比方说 我们建立一个模块叫做我的模块 my_test

下面应该是mytest下的目录结构


mytest

--class //这个是mytest模块会用到的类

--function//mytest模块用到的函数

--install//安装此模块需要的一些配置文件和建立数据表myslq语句什么的在这里

--language//多语言的时候会用到

--config.ini.php//这个配置文件是用来描述整个模块的一些信息

--extention.inc.php//这个是创建目录结构  .这个文件也用来控制权限

--model.php//模块使用了哪些数据模型.(可以理解为使用了哪些表.)

--model.sql//这个向数据库里面插入模型的记录

--my_test.sql//这个文件在安装的时候会被执行,把建立数据库表的sql放进来

--templates //,mytest模块用到的模板文件

--uninstall //卸载模块时候用到的配置和文件

这个里面的文件我没研究  回头研究了补上.

my_test.php //这个是mytest模块的后台控制器文件`

index.php//这个是前台的控制器,这个我没写东西.


 

 

建立完一个这样的结构后 我们还需要在/phpcms/model/下面建立我们的数据模型

例如  my_test_model.class.php  (这个使用了很典型的工厂模式)

具体每个文件里面写了些什么.我们一个一个来看 .首先来看我们在model文件夹下面写的那个文件.

<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('model', '', 0);
class my_test_model extends model {
    public function __construct() {
        $this->db_config = pc_base::load_config('database');
        $this->db_setting = 'default';//默认的数据库配置.//多个库的话可以在这里选库
        $this->table_name = 'my_test';//这个就是表名称,不用加表前缀
        parent::__construct();
    }
}
?>    

第一行的作用是确定是不是在phpcms的运行框架内.

第二行加载系统的model类,后面的参数0 的意思是并不实例化.

最后一行调用了父类的构造方法.可以在phpcms/libs/classes/model.class.php中找到

而这个model类里面定义了很多对数据的操作方法   最基本的增删改查。以后我再详细说说model基本的一些方法。

接着来看看modules   里面的东东

我们一个个往下面看  第一个language   是用来支持多语言菜单的。

然后是config.ini.php,这个里面写的是一些关于模块安装时候的信息。

文件里面是这个结构的

$module = 'mytest';//使用的model
$modulename = '这里是模块的名称';
$introduce = '模块的描述信息';
$author = '作者';
$authorsite = '作者网站';
$authoremail = '作者email';

里面标注的很清楚了

接着是extention.inc.php 这个文件是用来创建后台管理菜单的目录结构的,也是用来控制权限的 

$id= $menu_db->insert(array('name'=>'这里写着操作名称',      'parentid'=>父ID, 'm'=>'模块', 'c'=>'控制器', 'a'=>'动作',      'data'=>'', 'listorder'=>排序, 'display'=>'是否显示'),true);//最后的true是用来返回ID的

文件最后应该有一个数组,这个数组是用来插入系统的\language\zh-cn\system_menu.lang.php里面的  格式如下
$language = array(
    '这里是你起的操作名称'=>'这里是操作的中文翻译',
    类似:'mytest_init'=>'显示列表'
    );

然后是model.php  这个就是你使用了哪些数据模型 可以理解为使用了哪些表
return array('mytest','my_test_artcle');

然后是model.sql   这个是用来向系统的模型表里面插入数据用的
INSERT INTO `phpcms_module` (`module`, `name`, `url`, `iscore`, `version`, `description`, `setting`, `listorder`, `disabled`, `installdate`, `updatedate`) VALUES ();

然后是mytest.sql 建立你数据库表的语句应该写在这个文件里面

接着就是你所使用的模板  应该放在templates里面  命名的规则应该是   mytest_add.tpl.php

最后是你的控制器   这个有的研究了.控制器里面是针对你每个url传递过来的action也就是a=?的动作.默认动作是init

<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_app_class('admin','admin',0);
class mytest extends admin(){
  public function __construct(){

parent::__construct;//调用父类的构造函数

}

public function init(){


echo "这里是默认的操作方法";

}

public function add(){


include $this->admin_tpl('mytest_add');//使用模板的方法

}
}

控制器里面写好了   我们把上面的文件都写完了就可以安装我们的模块了 。
PHP 相关文章推荐
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
PHP 时间日期操作实战
Aug 26 PHP
解析PHP提交后跳转
Jun 23 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
input file获得文件根目录简单实现
Apr 26 #PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 #PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 #PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 #PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 #PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 #PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 #PHP
You might like
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
期中考试后的反思
2014/02/08 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
师德师风剖析材料
2014/09/30 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis