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 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
php防攻击代码升级版
Dec 29 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
PHP进程同步代码实例
Feb 12 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
多php服务器实现多session并发运行
2006/10/09 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
售后服务承诺书模板
2014/05/21 职场文书
经典团队口号大全
2014/06/21 职场文书
法制宣传标语
2014/06/23 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书