您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms二次开发步骤教程实例
语兰2025-05-26phpcms教程已有人查阅
导读phpcms是采用mvc设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
文件目录结构
根目录
|-api接口文件目录
|-caches 缓存文件目录
|- configs 系统配置文件目录
|- caches_* 系统缓存目录
|-phpcmsphpcms框架主目录
|- languages 框架语言包目录
|- libs 框架主类库、主函数库目录
|- model 框架数据库模型目录
|- modules 框架模块目录
|- templates 框架系统模板目录
|-phpsso_serverphpsso主目录
|-statics系统附件包
|- css 系统css包
|- images 系统图片包
|- js 系统js包
|-uploadfile网站附件目录
|-admin.php后台管理入口
|-index.php程序主入口
|-crossdomain.xmlflash跨域传输文件
|-robots.txt 搜索引擎蜘蛛限制配置文件
|-favicon.ico系统icon图标
url访问
phpcms是采用mvc设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
参数名称描述位置备注
m模型/模块名称phpcms/modules中模块目录名称必须
c控制器名称phpcms/modules/模块/*.php 文件名称必须
a事件名称phpcms/modules/模块/*.php 文件中方法名称
模块访问方法[示例]:
http://yourdomain.com/index.php?m=content&c=index&a=show&id=1
其中
m = content 为模型/模块名称 位于phpcms/modules/content
c = index 为控制器名称位于phpcms/modules/content/index.php
a = show为方法名称位于phpcms/modules/content/index.php 中show()方法
id = 1 为其他参数 与正常get传递参数形式相同
如果我们访问您的域名 如:
http:// .yourdomain.com/index.php
phpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。
因此下面的url的结果是相同的:系统还支持url路由的功能,这些都能够带来其他的url访问效果。
http:// .yourdomain.com/index.php?m=content&c=index&a=init
系统类库与函数调用
1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php
2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用
系统类库调用
pc_base::load_sys_class('类名','扩展地址','是否初始化');
示例:
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m
示例:
http://www.ebingou.cn/index.php?m=content
那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了
控制器
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同
如果您创建了一个mytest.php在test模块下,那么我们在浏览器里面输入url:
http://www.ebingou.cn/index.php?m=test&c=mytest
下面是一个控制器类的基本格式,在构建模块部分会具体讲解
命名规范
phpcms其自身的一定规范。下面是使用phpcms做二次开发中应该遵循的命名规范:
类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。
配置文件调用
配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法
调用系统配置中的附件路径
1.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"my_*.php"的形式进行二次开发。
例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"my_index.php"
my_index.php代码如下
数据库配置
数据库配置文件位置:caches/configs/database.php
我们打开这个配置文件,加入我们的数据库配置信息。数据库配置信息为二维数组结构,默认为default,可以根据default结构配置多个数据库链接(如:extended_1)
路由配置
路由配置文件位置:caches/configs/route.php
我们打开这个配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为default。
路由配置文件内容是这样的:
如下面的例子,在程序中您可以使用$_post['catid']来得到data下面post中的数组的值。
data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。
如:
系统配置
系统配置文件位置:caches/configs/system.php
具体详见该文件注释
构建模块
开发流程
为你的phpcms创建一个模块的一般开发流程是:
1.创建数据库和数据表;(没有数据库操作可略过)
2.创建模块目录
3.创建模块控制器类;
4.创建模块类与模块函数;(如果只是简单的模块可以不必创建)
5.创建模板文件;
6.运行和调试。
创建模块
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块
如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
例如我要开发一个叫做test的模块,那么首先在 phpcms/modules 目录下创建文件夹,并将其命名为test。
test文件夹下通常有三个文件夹:
classes为模块类库包
functions为模块函数库包
templates为模块模板包 这里通常放置含有权限控制的控制器模板,也就是后台模板。
如果您的模板有单独的前台模板,你需要在phpcms\templates\default下创建一个您的模块目录来放置前台模板
"default"为你的风格包名称,我们默认适用default
这里我们在default文件夹下创建名为test的文件夹存放模板
创建模块控制器
在创建模块中我们已经创建好了一个名为“test”的模块,接下来我们继续为这个模块添加两个控制器类。
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。
类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。
控制器类文件包含两种形式:
1.mytest.php 控制器,前台浏览(不含权限控制)
http://www.ebingou.cn/index.php?m=test&c=mytest
http://www.ebingou.cn/index.php?m=test&c=mytest&a=mylist
没有填写 “a” 的情况下,默认调用init方法
2.mytest_admin.php 控制器,后台管理(含权限控制)
后台控制控制器需要加载admin模块下的admin类,并继承该类。
需要注意的是因为你添加的控制器类继承了其他的类,你要小心你控制器的方法名不要和该类中的方法名一样了,否则会造成影响,具体请查看admin类中有哪些方法。
phpcms 可以实现完全的模板与程序分离,所以在我们的控制器程序中要加载模板,才可以更友好的显示出来。
1.加载前台模板
前台模板文件在phpcms\templates\default\模块名称 目录中,本示例也就在phpcms\templates\default\test中
加载模板方法如下:
在上面例子中如果要给mytest.php中init方法加载一个mytest的模板,如下
2.加载后台模板
后台模板文件在phpcms\modules\模块名称\templates 目录中,本示例也就在phpcms\modules\test\templates 中
加载模板方法如下:
在上面例子中如果要给mytest_admin.php中init方法加载一个mytest_admin_list的模板,如下
数据库模型位于:phpcms/model/ 目录下。
数据模型文件的命名规则建议为数据表名称+'_model.class.php'
如果在我们的创建的模块中我要使用一个数据库"test",首先需要建立一个数据库模型文件,文件名称为'test_model.class.php'
内容如下:
1.数据库模型类名称必须与文件名称相同;
2.$this->db_setting = 'default'为数据库配置文件中配置数据库链接池名称,默认为default,一般情况下不需要修改。
3.$this->table_name = 'test'为数据表名称
这样我们就建立好了一个数据库模型类。
在模块的控制器中使用
具体如下
根目录
|-api接口文件目录
|-caches 缓存文件目录
|- configs 系统配置文件目录
|- caches_* 系统缓存目录
|-phpcmsphpcms框架主目录
|- languages 框架语言包目录
|- libs 框架主类库、主函数库目录
|- model 框架数据库模型目录
|- modules 框架模块目录
|- templates 框架系统模板目录
|-phpsso_serverphpsso主目录
|-statics系统附件包
|- css 系统css包
|- images 系统图片包
|- js 系统js包
|-uploadfile网站附件目录
|-admin.php后台管理入口
|-index.php程序主入口
|-crossdomain.xmlflash跨域传输文件
|-robots.txt 搜索引擎蜘蛛限制配置文件
|-favicon.ico系统icon图标
url访问
phpcms是采用mvc设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
参数名称描述位置备注
m模型/模块名称phpcms/modules中模块目录名称必须
c控制器名称phpcms/modules/模块/*.php 文件名称必须
a事件名称phpcms/modules/模块/*.php 文件中方法名称
模块访问方法[示例]:
http://yourdomain.com/index.php?m=content&c=index&a=show&id=1
其中
m = content 为模型/模块名称 位于phpcms/modules/content
c = index 为控制器名称位于phpcms/modules/content/index.php
a = show为方法名称位于phpcms/modules/content/index.php 中show()方法
id = 1 为其他参数 与正常get传递参数形式相同
如果我们访问您的域名 如:
http:// .yourdomain.com/index.php
phpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。
因此下面的url的结果是相同的:系统还支持url路由的功能,这些都能够带来其他的url访问效果。
http:// .yourdomain.com/index.php?m=content&c=index&a=init
系统类库与函数调用
1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php
2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用
系统类库调用
pc_base::load_sys_class('类名','扩展地址','是否初始化');
示例:
$http = pc_base::load_sys_class('http'); //实例化http类
pc_base::load_sys_class('format', '', 0); //调用form类,不进行实例化操作
系统函数库调用
pc_base::load_sys_func('函数库名');
示例:
pc_base::load_sys_func('mail'); 调用mail函数包
模块phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m
示例:
http://www.ebingou.cn/index.php?m=content
那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了
控制器
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同
如果您创建了一个mytest.php在test模块下,那么我们在浏览器里面输入url:
http://www.ebingou.cn/index.php?m=test&c=mytest
下面是一个控制器类的基本格式,在构建模块部分会具体讲解
<?php
defined('in_phpcms') or exit('no permission resources.');
class mytest {
function __construct() {
}
public function init() {
echo 'hellp phpcms v9,my name is de t action';
}
}
?>
如果你添加的控制器类继承了其他的类,你要小心你的方法名不要和那个类中的方法名一样了,否则你的方 覆盖原有的。命名规范
phpcms其自身的一定规范。下面是使用phpcms做二次开发中应该遵循的命名规范:
类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。
配置文件调用
配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法
$upload_url = pc_base::load_config('配置文件','要获取的配置键','默认配置。当获取配置项目失败时该值发生作用','是否强制重新加载');
示例:调用系统配置中的附件路径
$upload_url = pc_base::load_config('system','upload_url');
二次开发技巧1.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"my_*.php"的形式进行二次开发。
例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"my_index.php"
my_index.php代码如下
<?php
class my_index extends index{
function __construct() {
parent::__construct();
}
//……your code
}
?>
这样当您通过url访问index控制器的时候,系统会默认指向my_index.php 并且原文件的方法将被继承,可以直接使用。数据库配置
数据库配置文件位置:caches/configs/database.php
我们打开这个配置文件,加入我们的数据库配置信息。数据库配置信息为二维数组结构,默认为default,可以根据default结构配置多个数据库链接(如:extended_1)
<?php
return array (
'default' => array (
'hostname' => 'localhost',
'database' => 'phpcms',
'username' => 'admin',
'password' => 'admin',
'tablepre' => 'v9_',
'charset' => 'gbk',
'type' => 'mysql',
'debug' => true,
'pconnect' => 0,
'autoconnect' => 0
),
/* 以下格外添加*/
'extended_1' => array (
'hostname' => '10.10.125.2',
'database' => 'phpcms',
'username' => 'admin',
'password' => 'admin',
'tablepre' => 'v9_',
'charset' => 'gbk',
'type' => 'mysql',
'debug' => true,
'pconnect' => 0,
'autoconnect' => 0
),
);
?>
根据您的数据库连接信息修改上面的配置内容,修改完成后,保存该数据库配置文件。路由配置
路由配置文件位置:caches/configs/route.php
我们打开这个配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为default。
路由配置文件内容是这样的:
<?php
return array(
'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'),
'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'),
);
?>
data为一个二维数组,可设置post和get的默认参数。post和get分别对应php中的$_post和$_get两个超全局变量。如下面的例子,在程序中您可以使用$_post['catid']来得到data下面post中的数组的值。
data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。
如:
<?php
return array(
'default'=>array(
'm'=>'phpcms',
'c'=>'index',
'a'=>'init',
'data'=>array(
'post'=>array(
'catid'=>1
),
'get'=>array(
'contentid'=>1
)
)
)
)
?>
外部程序post了一个变量catid=2那么你在程序中使用$_post取到的值是2,而不是配置文件中所设置的1。系统配置
系统配置文件位置:caches/configs/system.php
具体详见该文件注释
构建模块
开发流程
为你的phpcms创建一个模块的一般开发流程是:
1.创建数据库和数据表;(没有数据库操作可略过)
2.创建模块目录
3.创建模块控制器类;
4.创建模块类与模块函数;(如果只是简单的模块可以不必创建)
5.创建模板文件;
6.运行和调试。
创建模块
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块
如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
例如我要开发一个叫做test的模块,那么首先在 phpcms/modules 目录下创建文件夹,并将其命名为test。
test文件夹下通常有三个文件夹:
classes为模块类库包
functions为模块函数库包
templates为模块模板包 这里通常放置含有权限控制的控制器模板,也就是后台模板。
如果您的模板有单独的前台模板,你需要在phpcms\templates\default下创建一个您的模块目录来放置前台模板
"default"为你的风格包名称,我们默认适用default
这里我们在default文件夹下创建名为test的文件夹存放模板
创建模块控制器
在创建模块中我们已经创建好了一个名为“test”的模块,接下来我们继续为这个模块添加两个控制器类。
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。
类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。
控制器类文件包含两种形式:
1.mytest.php 控制器,前台浏览(不含权限控制)
<?php
defined('in_phpcms') or exit('no permission resources.');
class mytest {
function __construct() {
}
public function init() {
$myvar = 'hello world!';
echo $myvar;
}
public function mylist() {
$myvar = 'hello world!this is a example!';
echo $myvar;
}
}
?>
这个控制器的url访问方法前面已经介绍过了http://www.ebingou.cn/index.php?m=test&c=mytest
http://www.ebingou.cn/index.php?m=test&c=mytest&a=mylist
没有填写 “a” 的情况下,默认调用init方法
2.mytest_admin.php 控制器,后台管理(含权限控制)
后台控制控制器需要加载admin模块下的admin类,并继承该类。
需要注意的是因为你添加的控制器类继承了其他的类,你要小心你控制器的方法名不要和该类中的方法名一样了,否则会造成影响,具体请查看admin类中有哪些方法。
<?php
defined('in_phpcms') or exit('no permission resources.');
pc_base::load_app_class('admin','admin',0);
class mytest_admin extends admin {
public function __construct() {
}
public function init() {
$myvar = 'oh,i am phpcmser';
echo $myvar;
}
}
?>
在控制器中增加模板调用phpcms 可以实现完全的模板与程序分离,所以在我们的控制器程序中要加载模板,才可以更友好的显示出来。
1.加载前台模板
前台模板文件在phpcms\templates\default\模块名称 目录中,本示例也就在phpcms\templates\default\test中
加载模板方法如下:
include template('test', 'mytest', 'default');
其中 test为模块名称 mytest 为模板目录下模板名称,default为风格名称,默认不填为de t在上面例子中如果要给mytest.php中init方法加载一个mytest的模板,如下
public function init() {
$var = 'hello world!';
include template('test', 'mytest', 'default');
}
这样我们通过url访问该方法的时候也就加载了对应的模板。2.加载后台模板
后台模板文件在phpcms\modules\模块名称\templates 目录中,本示例也就在phpcms\modules\test\templates 中
加载模板方法如下:
include
$this->admin_tpl('mytest_admin_list');
其中mytest_admin_list为phpcms\modules\test\templates中mytest_admin_list.tpl.php,注意:后台模板必须以.tpl.php 作为后缀在上面例子中如果要给mytest_admin.php中init方法加载一个mytest_admin_list的模板,如下
public function init() {
$myvar = 'oh,i am phpcmser';
include $this->admin_tpl('mytest_admin_list');
}
创建数据库模型类数据库模型位于:phpcms/model/ 目录下。
数据模型文件的命名规则建议为数据表名称+'_model.class.php'
如果在我们的创建的模块中我要使用一个数据库"test",首先需要建立一个数据库模型文件,文件名称为'test_model.class.php'
内容如下:
<?php
defined('in_phpcms') or exit('no permission resources.');
pc_base::load_sys_class('model', '', 0);
class test_model extends model {
public function __construct() {
$this->db_config = pc_base::load_config('database');
$this->db_setting = 'default';
$this->table_name = 'test';
parent::__construct();
}
}
?>
注意:1.数据库模型类名称必须与文件名称相同;
2.$this->db_setting = 'default'为数据库配置文件中配置数据库链接池名称,默认为default,一般情况下不需要修改。
3.$this->table_name = 'test'为数据表名称
这样我们就建立好了一个数据库模型类。
在模块的控制器中使用
$this->db = pc_base::load_model('test_model');
来加载。具体如下
<?php
defined('in_phpcms') or exit('no permission resources.');
class mytest {
private $db;
function __construct() {
$this->db = pc_base::load_model('test_model');
}
public function init() {
$result = $this->db->select();
var_dump($result);
}
}
?>
其中$this->db中所支持的方法请参照phpcms/libs/classes/model.class.php中方法
本文标签:
很赞哦! ()
上一篇:phpcms模板引擎源码分析
相关教程
图文教程
phpcms分页错误的解决方法
打开/include/global.func.php查找函数function pages($total, $page = 1, $perpage = 20, $urlrule = '', $array = array(), $catid = 0) 可以看到pages函数结构如下 代码: function pages(
PHPCMS首页文件位置路径
PHPCMS的首页文件路径是“phpcms/templates/default/content/index.html”;该路径是PHPCMS中的默认首页模板,如果要找到自定义的首页模板
phpcms有控制器吗?怎么新增一个控制器?
phpcms有控制器。phpcms控制器是模块的类文件,储存在“phpcms/modules”下面,每个模块都是独立的命名方式,类名是“文件名+.php命名”格式;控制器类默认继承系统的函数库
phpcms插件制作使用方法教程
最近在研究PHP,学了一段时间后感觉想自己写点东西,但是又不知道写什么,之后把目标对准了PHPCMS的插件,从网上找了一下,大部分教程都只是教怎么写插件的具体代码
相关源码
-
自适应建材瓷砖卫浴大理石类pbootcms网站模板源码下载为建材瓷砖、卫浴瓷砖企业打造的高端响应式门户模板,基于PbootCMS内核深度开发。采用前沿HTML5自适应架构,无缝兼容手机端触控交互与PC端展示场景。查看源码 -
(自适应响应式)绿色环保防腐木材轻钢别墅建材pbootcms模板下载本模板为环保防腐木材、轻钢别墅建材类企业设计开发,基于PbootCMS内核构建,充分考虑了建材行业的展示需求与产品特点。模板设计风格自然环保,布局清晰合理,呈现建材产品特性与专业优势,帮助访客直观了解产品特点并建立信任感。查看源码 -
快递物流公司pbootcms网站模板html响应式自适应源码下载基于HTML5+CSS3前沿技术开发,实现PC、平板、手机多端自适应。采用弹性布局与媒体查询技术,确保不同设备均有流畅视觉体验,企业形象统一。查看源码 -
(自适应)大型农业机械设备水稻玉米收割机网站pbootcms源码下载本模板基于PbootCMS内核开发,为农业机械设备制造与销售企业设计,特别适合水稻玉米收割机、拖拉机、播种机等农用机械展示。模板充分考虑了农机行业的特性,从产品展示到技术参数,从作业案例到售后服务查看源码 -
HTML5响应式健身俱乐部pbootcms网站模板下载为健身俱乐部、瑜伽中心及运动场馆设计的响应式网站模板,采用PbootCMS内核开发,支持一键替换图文适配健身器材销售、瑜伽工作室等多类型运动健康产业。查看源码 -
(自适应)互联网建站网络公司个人工作室网站模板基于PbootCMS内核开发,围绕「技术方案展示」「成功案例库」「服务流程说明」三大模块构建,支持PC与移动端数据实时同步。附带包含客户评价、行业解决方案的完整测试数据包查看源码
| 分享笔记 (共有 篇笔记) |
