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 相关文章推荐
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
ini_set的用法介绍
Jan 07 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
php图片裁剪函数
Oct 31 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
实例化php类时传参的方法分析
Jun 05 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP设置进度条的方法
2015/07/08 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
Python格式化css文件的方法
2015/03/10 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
党校培训自我鉴定
2014/02/01 职场文书
实习单位评语
2014/04/26 职场文书
事业单位考核材料
2014/05/21 职场文书
青年文明号口号
2014/06/17 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
redis限流的实际应用
2021/04/24 Redis
一文搞懂Redis中String数据类型
2022/04/03 Redis
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技
Python经常使用的一些内置函数
2022/04/11 Python