admin 管理员组文章数量: 887031
2024年1月24日发(作者:beaver)
PHPCMS二次开发教程
文件目录结构
根目录
| – api 接口文件目录
| – caches 缓存文件目录
| – configs 系统配置文件目录
| – caches_* 系统缓存目录
| – phpcms phpcms框架主目录
| – languages 框架语言包目录
| – libs 框架主类库、主函数库目录
| – model 框架数据库模型目录
| – modules 框架模块目录
| – templates 框架系统模板目录
| – phpsso_server phpsso主目录
| – statics 系统附件包
| – css 系统css包
| – images 系统图片包
| – js 系统js包
| – uploadfile 网站附件目录
| – 后台管理入口
| – 程序主入口
| – FLASH跨域传输文件
| – 搜索引擎蜘蛛限制配置文件
| – 系统icon图标
PHPCMS V9 核心文件说明
模块与控制器
模块:
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m。
访问content模块示例:/?m=content
控制器:
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为abc的控制器,那么他的 命名为即可。控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。如果您创建了一个在 test模块下,那么我们在浏览器里面输入URL:/?m=test&
c=abc
二次开发技巧
如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过“MY_*.php”的形式进行二次开发。
例如您要对改phpcms/mood/进行二次开发。您可以在与同级的目录下建立"MY_"
class MY_index extends index{
function __construct() {
}
parent::__construct();
}
……your code
这样当您通过url访问index控制器的时候,系统会默认指向MY_
并且原文件的方法将被继承,可以直接使用。
如果需要增加自己的全局函数,可根据需要增加到/phpcms/libs/functions//中,不会影响升级
数据模型基类:
文件路径:根目录/phpcms/libs/classes/ 代码片段如下:
>
pc_base::load_sys_class('db_factory', '', 0);
class model { //数据库配置
protected $db_config = ''; //数据库连接
protected $db = ''; //调用数据库的配置项
protected $db_setting = 'default'; //数据表名
protected $table_name = ''; //表前缀
public $db_tablepre = '';
……
加载数据模型后,可以的数据库该类中方法进行数据库操作。
表单调用类:
文件路径:根目录/phpcms/libs/classes/。 代码片段如下:
class form {
//编辑器调用
public static function editor($textareaid = 'content', $toolbar
= 'basic', $module = '', $catid = '', $color = '', $allowupload = 0,
$allowbrowser = 1,$alowuploadexts = '',$height = 200,$disabled_page =
0) {
}
//图片上传调用
public static function images($name, $id = '', $value = '',
$moudle='', $catid='', $size = 50, $class = '', $ext = '', $alowexts
= '',$thumb_setting = array(),$watermark_setting = 0 ) {
>
}
……
通过实例化该类可以,调用在程序中调用编辑器、表单上传、日期选择、栏目结构等表单。 实例化方法:pc_base::load_sys_class('form', '', 0);
模板解析缓存类:
文件路径:根目录/phpcms/libs/classes/template_ 。 代码片段如下:
final class template_cache {
public function template_compile($module, $template, $style =
‘default’) {
$tplfile = $_tpl =
PC_PATH.'templates'.DIRECTORY_SEPARATOR.$ORY_SEPARATOR.$ORY_SEPARATOR.$template.'.html';
……
?>
该类作用为解析模板,解析模板及更新模板缓存
PHPCMS创建模块开发流程
为你的phpcms创建一个模块的一般开发流程是:
创建数据库和数据表;(没有数据库操作可略过)
创建模块目录
创建模块控制器类;
创建模块类与模块函数;(如果只是简单的模块可以不必创建)
创建模板文件;
运行和调试。
第一、创建模块文档结构
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块
如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
例如我要开发一个叫做test的模块,那么首先在 phpcms/modules 目录下创建文件夹,并将其命名为test。
test模块的标准结构通常是这样的。
其中
classes为模块类库包
functions为模块函数库包
templates为模块模板包这里通常放置含有权限控制的控制器模板,也就是后台模板。
如果您的模板有单独的前台模板,你需要在phpcmstemplatesdefault下创建一个您的模块目录来放置前台模板,"default"为你的风格包名称,我们默认适用default
第二:创建模块控制器类
在创建模块中我们已经创建好了一个名为“test”的模块,接下来我们继续为这个模块添加两个控制器类。
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为即可。控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。
控制器类文件包含两种形式:
控制器,前台浏览(不含权限控制)
defined('IN_PHPCMS')orexit('No permission resources.');
classmytest{
function__construct(){
}
publicfunctioninit(){
$var='hello world!';
echo $myvar;
}
publicfunctionmylist(){
$var='hello world!this is a example!';
echo $myvar;
}
}
>
这个控制器的url访问方法前面已经介绍过了,
/?m=test&c=mytest
/?m=test&c=mytest&a=mylist
没有填写 “a” 的情况下,默认调用init方法
_ 控制器,后台管理(含权限控制)
后台控制控制器需要加载admin模块下的admin类,并继承该类。需要注意的是因为你添加的控制器类继承了其他的类,你要小心你控制器的方法名不要和该类中的方法名一样了,否则会造成影响,具体请查看admin类中有哪些方法。
defined('IN_PHPCMS')orexit('No permission resources.');
pc_base::load_app_class('admin','admin',0);
classmytest_adminextendsadmin{
publicfunction__construct(){
}
publicfunctioninit(){
$myvar='oh,i am phpcmser';
echo $myvar;
}
}
>
3.在控制器中增加模板调用
phpcms 可以实现完全的模板与程序分离,所以在我们的控制器程序中要加载模板,才可以更友好的显示出来。
1).加载前台模板
前台模板文件在phpcmstemplatesdefault模块名称 目录中,本示例也就在phpcmstemplatesdefaulttest中
加载模板方法如下:
includetemplate('test','mytest','default');
其中test为模块名称mytest 为模板目录下模板名称,default为风格名称,默认不填为defalut
在上面例子中如果要给中init方法加载一个mytest的模板,如下
publicfunctioninit(){
$var='hello world!';
includetemplate('test','mytest','default');
}
这样我们通过url访问该方法的时候也就加载了对应的模板。
2).加载后台模板
后台模板文件在phpcmsmodules模块名称templates 目录中,本示例也就在phpcmsmodulestesttemplates 中
加载模板方法如下:
include $this->admin_tpl('mytest_admin_list');
其中mytest_admin_list为phpcmsmodulestesttemplates中mytest_admin_,注意:此处模板必须以. 作为后缀
在上面例子中如果要给mytest_中init方法加载一个mytest_admin_list的模板,如下
publicfunctioninit(){
$myvar='oh,i am phpcmser';
include $this->admin_tpl('mytest_admin_list');
}
第三:创建数据库模型类
数据库模型位于:phpcms/model/ 目录下。
数据模型文件的命名规则建议为数据表名称+'_'
如果在我们的创建的模块中我要使用一个数据库“test”,首先需要建立一个数据库模型文件,文件名称为'test_'
内容如下:
defined('IN_PHPCMS')orexit('No permission resources.');
pc_base::load_sys_class('model','',0);
classtest_modelextendsmodel{
publicfunction__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');
来加载。
具体如下
defined('IN_PHPCMS')orexit('No permission resources.');
classmytest{
private$db;
function__construct(){
$this->db=pc_base::load_model('test_model');
}
publicfunctioninit(){
$result=$this->db->select();
var_dump($result);
}
}
>
其中$this->db中所支持的方法请参照phpcms/libs/classes/中方法
PC标签使用说明
在PHPCMS V9中我们正式开始需要PC标签做为数据的获取的方式。
PC标签是以下面的方式进行声明
{pc:content action="lists" cache="3600" num="20" page="$page"}{/pc}
PC标签必须以{pc}开头,并以{/pc}结尾的代码片段。
当然不以{/pc}结尾并不会引起程序致命性的错误,导致程序无法继续运行。
以下为两种已知可能会出现的问题:
1. 当网页中出现两个PC标签时,可能会使得没有闭合的PC标签之后的PC标签数据和其混乱。
2. 在后台可视化编辑时,可能出现网页结构错乱的问题。
PC标签分析:
PC标签中{pc:}冒号之后跟随的为模块名。如上面的例子中调用的是内容模型的PC标签。
action="list"
这个形式所代表的是参数。每一个PHPCMS V9模型都为其PC标签定义了调用的参数。其中有一些调用参数是系统保留的参数,其对所有的PC标签都是有效的。
参数必须使用
参数名="参数值"
的方式填写,多个参数之间使用空格分开(如下例),参数值可使用双引号来包括,无论是什么形式的引号都必须是成对出现的。
{pc:content 参数名="参数值" 参数名="参数值" 参数名="参数值"}
请查看PC标签保留参数相关章节,以了解具体保留参数及其用途。
PC标签分类:
PC标签包含两个类别,分别为:
1. 工具类
2. 模块类
工具类,大体上可以理解为PHPCMS V9所提供的一些工具箱。请查看PC标签工具箱相关章节,以了解更多关于工具类的PC标签的更多信息。
而模块类,是PHPCMS V9各个模型提供给大家调用模块数据的数据接口。查看具体模块的相关说明章节,以了解更多关于模块类的PC标签的更多信息。
如何显示PC标签中的数据:
默认情况下PC标签中的数据都是数组方式返回的,你都可以通过 $data 来获取到这个数组,如果你在PC标签中定义了return参数,返回的数组将使用return的值进行命令。
一般情况下你可以使用如下的方式来显示值:
{loop $data $key $val}
{/loop}
基中的$val[url]和$val[title]需要具体根据所使用的PC标签,返回的数据来判断。
PC标签保留参数
下表为PC标签保留参数表,几乎所有的PC标签都支持这些保留参数设置
变量名 默认值 说明
本参数的值表示为操作事件,模型action null 类PC标签必须使用包含本参数,以说明要进行的操作。
cache
num
page
urlrule
return
0
20
null
null
data
缓存存储时间(单位秒)
获取记录的条数,最后会被模板引擎处理成limit传送到处理函数中。
当前分页。一般填写为$_GET[page]
URL规则
返回数据变量名
下例中是一个完整的使用例子。
{pc:content action="lists" catid="25" num="20" page="$_GET[page]" return="data"}
- {$r[title]}
{loop $data $n $r}
{/loop}
{/pc}
get标签
GET标签源自于PHPCMS 2008版,其使用SQL语句直接获取数据的特性,成为大家制作模板的首选。
在V9中这样强大的工具也得到保留下来。
GET标签使用方式如下:
{pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page"
dbsource="discuz" return="data"}
{loop $data $key $val}
{$val[username]}
{/loop}
{$pages}
{/pc}
从上面的代码里面可以看出GET标签所支持的参数。对照下面的列表了解每一个参数的用途:
默认值
null
0
0
必须
是
否
否
否
否
参数
sql
cache
page
说明
要执行的SQL语句
缓存时间,单位为秒
分页,通过变量把当前的分布传给PC标签进行处理
dbsource null
return data
数据源,当你通过系统后台的数据源模块配置过数据源时,可把数据源名填写到这里,系统会去对应的数据本系统的数据请留空
返回的数据的变量
内容模块
内容模块PC标签调用说明
模块名:content
模块提供的可用操作
操作名
lists
relation
hits
category
说明
内容数据列表
内容相关文章
内容数据点击排行榜
内容栏目列表
position 内容推荐位列表
position操作说明如下:
内容推荐位列表(position):
可用参数:
参数名
posid
catid
thumb
order
num
是否必须
是
否
否
否
是
默认值
null
null
0
null
null
说明
推荐位ID
调用栏目ID
是否仅必须缩略图
排序类型
数据调用数量
代码例子:
{pc:content action="position" posid="2" order="listorder DESC" num="4"}
- {$val['title']}
{loop $data $key $val}
{/loop}
{/pc}
返回参数如下表:
字段
title
url
类型
char(80)
char
空
否
否
否
是
默认
NULL
NULL
NULL
NULL
推荐位标题
推荐位链接地址
推荐位发布时间
推荐位缩略图
注释
inputtime int(10)
thumb char
其他 不定 是 根据模型所设置的加入到推荐位中字段名称
内容列表(lists):
可用参数:
参数名
catid
where
thumb
order
num
moreinfo
是否必须
否
否
否
否
是
否
默认值
null
null
0
null
null
0
说明
调用栏目ID
sql语句的where部分
是否仅必须缩略图
排序类型
数据调用数量
是否调用副表数据
提醒:从PHPCMS V9 Beta 20101105版本开始支持moreinfo参数属性,本参数表示在返回数据的时候,会把副表中的数据也一起返回。一个内容模型分为2个表,一个主表一个副表,主表中一般是保存了标题、所属栏目等等短小的数据(方便用于索引),而副表则保存了大字段的数据,如内容等数据。在模型管理中新建字段的时候,是允许你选择存入到主表还是副表的(我们推荐的是,把不重要的信息放到副表中)。想要在列表中调取副表的数据就需要在PC标签中使用moreinfo这个属性。
代码例子:
{pc:content action="lists" catid="2" order="id DESC" num="4"}
- {$val['title']}
{loop $data $key $val}
{/loop}
{/pc}
where用法:
{pc:content action="lists" catid="2" where="`thumb`!='' AND `status`=99" order="id DESC"
num="4"}
- {$val['title']}
{loop $data $key $val}
{/loop}
{/pc}
返回参数如下表:
字段
title
url
类型
char(80)
char
空
否
否
否
是
是
默认
NULL
NULL
NULL
NULL
推荐位标题
推荐位链接地址
推荐位发布时间
推荐位缩略图
其他模型字段
注释
inputtime int(10)
thumb
其他
char
不定
点击排行榜(hits):
可用参数:
参数名
catid
day
是否必默认须
否
否
值
null
0
null
null
说明
调用栏目ID
调用多少天内的排行
排序类型(本月排行- monthviews DESC 、本周排行 - weekviews DESC、今日排行 -
dayviews DESC)
数据调用数量
order 否
num 是
代码例子:
{pc:content action="hits" catid="2" order="weekviews DESC" num="10"}
- {$val['title']}
{loop $data $key $val}
{/loop}
{/pc}
返回参数如下表:
字段
title
url
类型
char(80)
char
空
否
否
否
是
是
默认
NULL
NULL
NULL
NULL
推荐位标题
推荐位链接地址
推荐位发布时间
推荐位缩略图
其他模型字段
注释
inputtime int(10)
thumb
其他
char
不定
相关文章(relation):
可用参数:
参数名
catid
relation
keywords
num
是否必须
否
否
否
是
默认值
null
$relation
null
null
说明
调用栏目ID
无需更改
内容页面取值:$rs[keywords]
数据调用数量
代码例子:
{pc:content action="relation" relation="$relation" catid="$catid" num="5"
keywords="$rs[keywords]"}
{loop $data $r}
target="_blank">{$r[title]}
({date('Y-m-d',$r[inputtime])}){/loop}
{/pc}
返回参数如下表:
字段
title
url
类型
char(80)
char
空
否
否
否
是
是
默认
NULL
NULL
NULL
NULL
推荐位标题
推荐位链接地址
推荐位发布时间
推荐位缩略图
其他模型字段
注释
inputtime int(10)
thumb
其他
char
不定
栏目列表(category):
可用参数:
参数名
catid
$siteid
order
是否必须
否
否
否
默认值
0
1
null
说明
调用该栏目下的所有栏目 ,默认0,调用一级栏目
默认调用系统站点
排序方式、一般按照listorder ASC排序,即栏目的添加顺序
代码例子:
{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}
{loop $data $r}
{/pc}
返回参数如下表:
字段
catid
siteid
module
type
modelid
parentid
arrparentid
child
arrchildid
catname
image
description
parentdir
catdir
url
items
hits
setting
listorder
ismenu
sethtml
letter
smallint
tinyint(3)
varchar(15)
tinyint(1)
tinyint(5)
smallint(5)
类型 默认值 说明
栏目ID
站点ID
模块ID
栏目类型ID
模型ID
上级父栏目
所有父栏目
子栏目
所有子栏目
栏目名称
栏目图片
栏目描述
父栏目目录
栏目目录
栏目链接
栏目内容数
点击数
栏目设置
排序
是否显示
是否生成到根目录
栏目拼音
无
0
无
1
5
5
无
0
无
无
无
无
无
无
无
0
0
无
0
0
0
无
varchar(255)
tinyint(1)
mediumtext
varchar(30)
varchar(100)
mediumtext
varchar(100)
varchar(30)
varchar(100)
mediumint(8)
int(10)
mediumtext
smallint(5)
tinyint(1)
tinyint(1)
varchar(30)
版权声明:本文标题:PHPCMS二次开发教程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706060793h500190.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论