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 相关文章推荐
新闻分类录入、显示系统
Oct 09 PHP
php基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
php eval函数用法总结
Oct 31 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
php生出随机字符串
Jul 06 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
PHP多进程简单实例小结
Nov 09 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
JS控制输入框内字符串长度
2014/05/21 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
解决Django中调用keras的模型出现的问题
2019/08/07 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
酒店公关部经理岗位职责
2013/11/24 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
Python数组变形的几种实现方法
2022/05/30 Python