RPCMS 帮助文档 V1.7+

关于RPCMS

一个轻量型内容管理/博客系统,自由方便,灵活度高

RPCMS是一款基于PHP+MYSQL的轻量型内容管理/博客系统,支持PHP5.6版本以上,支持win/Linux系统。
它虽然小巧,但有着强大的扩展性、丰富的插件接口和大量的模板。
系统统一采用模板标签,开发更方便!

查看安装教程 查看使用教程

系统功能介绍

use使用,根空间 rp

名称 方法
App 主文件,可global $App 在局部使用  
Cache 缓存 ::read 获取
::update(name) 更新
Config 配置 ::set 设置配置
::get 获取配置
::has 检查配置是否存在
Db 数据库,链式操作
Hook 钩子 ::addHook(名称,执行方法(空间命名式)) 添加钩子
::deleHook(名称,执行方法(空间命名式)) 删除钩子
::doHook(名称) 执行钩子
::getHook(名称) 获取钩子
::saveHook 保存钩子缓存文件
::setHookNull 初始化清空钩子
Plugin 插件(开发插件可exend此类) ->setConfig 保存插件配置
->getConfig 获取插件配置
::ResetAllHook 重置插件钩子
Url 前台链接地址生成
View 视图 ::assign 模板赋值变量
::display 加载模板并显示

伪静态

  • Apache:
    <IfModule mod_rewrite.c>
    	Options +FollowSymlinks -Multiviews
    	RewriteEngine On
    	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteCond %{REQUEST_FILENAME} !-f
    	RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
    </IfModule>
  • Nginx:
    location / {
    	if (!-e $request_filename){
    		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
    	}
    }

多应用

rpcms是支持多应用的,系统默认自带index、admin、install、api(V1.7新增)四个应用。若你需要,可以新增应用,应用支持配置二级域名和独立的配置(V1.8最新版新增)

Q:如何新增应用?

  • 在system中新建文件夹,命名为你需要新增的应用名称(小写英文字母,不要使用中文,哪怕你用拼音都行)。
  • 在新增的文件夹中新建Index.class.php,此处需注意,文件命名的首字母需大写。
  • Index.class.php中编写代码即可,空间命名:namespace rp\你新增的应用名称;
  • 其他控制器文件同Index.class.php。

提示:所有应用默认访问index控制器的index方法。

Q:如何给应用配置二级域名?
请参考《教程9-高级晋级,应用绑定二级域名》进行配置。

Q:如何设置不同的应用不同的配置?
此功能是V1.8新增的,如果你按照步骤操作后没有实现,那么请升级程序吧。

  • 你需要有新增的应用。
  • 在根目录创建一个 应用名_config.php 的文件,参数&语法请参考config.php。
  • OK了,就这么简单。应用配置中的参数会覆盖系统的配置(即config.php中的参数)。

系统钩子介绍

前置钩子

钩子 名称 说明
cms_index_run 系统运行前置 可用于IP,地域拦截等
cms_index_begin 路由拦截 需return array,array格式参照根目录route.php文件

系统后台钩子

钩子 名称 说明
admin_top_menu 插件按钮 位于顶部菜单
admin_left_menu 插件按钮 位于左侧菜单
admin_logs_submenu_hook 插件按钮 位于文章列表上方
admin_logs_edit_hook 文章扩展钩子 传参$data文章数据,位于文章编辑器上方
admin_logs_edit_hook2 文章扩展钩子2 传参$data文章数据,位于文章编辑器下方
admin_logs_edit_hook3 文章扩展钩子3 传参$data文章数据,位于文章发布按钮上方
admin_logs_save 文章新增、修改 传参$logId,如:1
admin_logs_dele 文章删除 传参$ids,如:1,2,3
admin_logs_status 文章状态更改 传参$ids,如:1,2,3
admin_pages_submenu_hook 插件按钮 位于单页列表上方
admin_pages_edit_hook 单页扩展钩子 传参$data单页数据,位于单页编辑器上方
admin_pages_edit_hook2 单页扩展钩子2 传参$data单页数据,位于单页编辑器下方
admin_pages_edit_hook3 单页扩展钩子3 传参$data单页数据,位于单页发布按钮上方
admin_pages_save 单页新增、修改 传参$pageId,如:1
admin_pages_dele 单页删除 传参$ids,如:1,2,3
admin_comment_submenu_hook 插件按钮 位于评论列表上方
admin_attach_upload 附件上传 传参$filepath,如:D:/www/aaa.jpg
可用户图片加水印
comment_reply 回复评论 传参$data(回复的数据数组)
可用于邮件通知用户

系统前端钩子

钩子 名称 说明
comment_post 前台评论前置 在保存数据前使用
comment_save 前台评论后置 在保存数据后使用
index_header 头部扩展 用于存放公共css等
index_footer 底部扩展 用于存放公共mod,js等
index_search 内容搜索
index_logs_list 文章列表扩展 传参$data文章列表数组
index_logs_detail 文章/单页内容扩展 传参$data文章/单页数据
index_down 附件下载前置 可用于更新下载量,授权下载等

配置介绍

引入配置:use rp\Config;

设置配置:Config::set(name , value)

//value可以为字符串或数组或二维数组,如:
Config::set('name1', 'this is name1');
Config::set('name2', ['value1','value2']);
Config::set('name3', ['name3_1'=>'value3_1', 'name3_2'=>'value3_2']);
Config::set(['name4_1'=>'value4_1', 'name4_2'=>'value4_2']);

获取配置:Config::get(name),如:

Config::get('name1');
Config::get('name3.name3_1');
Config::get('name4_1');

获取后台系统设置的配置,此参数只有在index应用中使用

Config::get('webConfig.webName');

缓存介绍

引入缓存:use rp\Cache;

更新缓存

Cache::update(name); //当name为空的时候,更新所有缓存

获取缓存

Cache::read(name);

缓存类别

  • category:分类缓存
  • hook:钩子缓存
  • links:友链缓存
  • logRecord:文章归档缓存
  • nav:导航缓存
  • option:后台配置缓存
  • pages:单页缓存
  • tages:标签缓存
  • template:使用模板&模板配置缓存
  • waptemplate:手机端使用模板&模板配置缓存
  • total:统计缓存,文章/单页数量(总数量,草稿数量,待审数量,下架数量,发布数量),评论数量(总数量,待审数量,发布数量)
  • user:用户缓存
  • special:专题缓存

进阶教程

获取前端数据

  • 获取POST:input('post.name', '默认值')
  • 获取GET:input('get.name', '默认值')
  • 获取REQUEST:input('request.name', '默认值')
  • 获取SERVER:$App::server(name) 或者 input('server.name', '默认值')
  • 设置COOKIE:cookie(名称, 值, 时长, path)
  • 获取COOKIE:cookie(name)
  • 删除COOKIE:cookie(name, NULL)
  • 设置SESSION:session(名称, 值)
  • 获取SESSION:session(name)
  • 删除SESSION:session(name, NULL)

若POST,GET,REQUEST,SERVER获取全部数据是,写法:input('post.')

钩子操作

引入钩子:use rp\Hook;

添加钩子:Hook::addHook(名称,执行控制器::执行方法),如:

Hook::addHook('hookName', 'plugin\demo\index::action');

删除钩子:Hook::deleHook(名称,执行控制器::执行方法),如:

Hook::deleHook('hookName','plugin\demo\index::action');

执行钩子:Hook::doHook(名称, $areg, $isReturn),如:

/*
$args为钩子的传递参数(数组形式),$isReturn默认false,
当$args传递钩子的指定方法时,$isReturn可为钩子的传递参数,第四参数可为$isReturn。
当$isReturn为true时,如果hook拥有多个,那么除第一个外其他不会执行。
举例:
*/

//运行hookName钩子
Hook::doHook('hookName');

//运行hookName钩子带参数,带上&表示引用参数
$args='this is args';
Hook::doHook('hookName', array(&$args));

//运行hookName钩子带参数并返回
$args='this is args';
Hook::doHook('hookName', array($args), true);

//运行hookName钩子的指定方法
$action='plugin\demo\index::action';
Hook::doHook('hookName', $action);

//运行hookName钩子的指定方法并返回
$action='plugin\demo\index::action';
Hook::doHook('hookName', $action, true);

//运行hookName钩子的指定方法并带参数
$action='plugin\demo\index::action';
Hook::doHook('hookName', $action, array('this is args'));

//运行hookName钩子的指定方法带参数并返回
$action='plugin\demo\index::action';
Hook::doHook('hookName', $action, array('this is args'), true);

获取钩子:Hook::getHook(名称)

判断钩子是否存在:Hook::hasHook(名称)

保存钩子缓存文件:Hook::saveHook()

初始化清空钩子:Hook::setHookNull()

链接

引入URL:use rp\Url;

设置HTTP状态码

Url::setCode(code);

生成URL(后台推荐使用)

Url::setUrl('index/index');

跳转链接

Url::redirect(str);

前端链接地址:

文章URL:Url::logs(id, page);
分类URL:Url::cate(id, page);
专题URL:Url::special(id, page);
单页URL:Url::page(id);
标签URL:Url::tag(id, page);
导航URL:Url::nav(type, id, url); //type:2分类, 3单页, 4自定义;url:自定义的URL
插件URL:Url::plugin(name, action, page); //name:插件文件夹名称;action(array):'执行的控制器,执行的方法'
其他URL:Url::other(name, data, page); //name:类别名称;data:类别数据

other的name说明

  • index:首页
  • author:作者
  • date:日期
  • captcha:验证码
  • comment:留言列表
  • search:搜索

数据库操作

引入数据库:use rp\Db;

  • name(table):数据表,无需带前缀
  • table(table):数据表,需带前缀,完整的数据表名称
  • field(fieldStr):查询字段,字符串或一维数组,默认*
  • alias(str):数据表别名,配合join使用
  • join(table, condition, type):联表查询,join(关联表, 关联条件, 关联类型);类型有:left,right,inner,full 默认left;可传二维数组多表关联,如[[关联表, 关联条件, 关联类型], [关联表, 关联条件, 关联类型]]
  • where(str or array):查询条件,可字符串或二维数组,详细语法查看下方“where语法”
  • limit(limitStr):查询数量,如:limit('0,10')
  • order(field, type):排序方式,如:order('id','desc')或order(['id'=>'desc','time'=>'desc']);使用SQL函数:order('rand()')
  • group(field):分组统计,如:group('type')
  • find():查询单条数据
  • select():查询多条数据
  • count(field):统计数量,默认字段*
  • sum(field):获取总和
  • insert(array):插入数据,一维数组时为单条,二维数组时为多条
  • update(array):修改数据,如:update(['name'=>'name1'])
  • setInc(field, number):指定字段自增,默认+1
  • setDec(field, number):指定字段自减,默认-1
  • dele():删除数据

其他方法

  • getSql():获取生成select的SQL语句
  • insert_id():获取新增数据的主键值
  • affected_rows():获取操作影响的行数
  • query(sql):原生Mysql语句查询,方式:Db::instance()->query(sql语句);

快速使用

//注意:必须Db::name()开始
$res=Db::name('tableName')->where(['id'=>1])->find();

where语法

可用表达式:=, <>, !=, >, >=, <, <=, like, not like, in, not in, between, not between, exists, not exists, exp, find_in_set
表达式参数请用字符串,比如array('id'=>array('in','1,2'))或array('id'=>array('in',join(',',[1,2]))

字符串形式:

Db::name('tableName')->where('id=1')->find();

常规用法:

Db::name('tableName')->where(array('id'=>1,'status'=>1))->find();

//生成SQL:select * from tableName where id = 1 and status = 1

表达式用法:

Db::name('tableName')->where(array('id'=>1,'status'=>array('>',1)))->find();

//生成SQL:select * from tableName where id = 1 and status > 1

NULL用法:

Db::name('tableName')->where(array('name'=>'null'))->find();

//生成SQL:select * from tableName where name is null

NOT NULL用法:

Db::name('tableName')->where(array('name'=>'not null'))->find();

//生成SQL:select * from tableName where name is not null

多字段同条件OR:

Db::name('tableName')->where(array('name|nick'=>'test'))->find();

//生成SQL:select * from tableName where (name = 'test' or nick = 'test')

多字段同条件AND:

Db::name('tableName')->where(array('name&nick'=>'test'))->find();

//生成SQL:select * from tableName where (name = 'test' and nick = 'test')

多字段同条件表达式:

Db::name('tableName')->where(array('name|nick'=>array('like','%t%')))->find();

//生成SQL:select * from tableName where (name like '%t%' or nick like '%t%')

多字段不同条件OR:

Db::name('tableName')->where(array('name|nick'=>array('test','user')))->find();

//生成SQL:select * from tableName where (name = 'test' or nick = 'user')

多字段不同条件AND:

Db::name('tableName')->where(array('name&nick'=>array('test','user')))->find();

//生成SQL:select * from tableName where (name = 'test' and nick = 'user')

多字段不同条件表达式:

Db::name('tableName')->where(array('name|nick'=>array(array('<>','test'),array('like','%user%'))))->find();

//生成SQL:select * from tableName where (name <> 'test' or nick like '%user%')

复杂逻辑:

Db::name('tableName')->where(array('status&(name|nick)'=>array(1,array('<>','test'),array('like','%user%'))))->find();

//生成SQL:select * from tableName where (status = 1 and (name <> 'test' or nick like '%user%'))

多条件like:

Db::name('tableName')->where(array('name|nick'=>array('like',array('%user%','%member%'),'or')))->find();

//生成SQL:select * from tableName where (name like '%user%' or name like '%member% or nick like '%user%' or nick like '%member% ')

混合使用:

Db::name('tableName')->where(array('phone'=>'not null','money'=>array('>',100),'status&(name|nick)'=>array(1,array('<>','test'),array('like','%user%'))))->find();

//生成SQL:select * from tableName where phone is not null and money > 100 and (status = 1 and (name <> 'test' or nick like '%user%'))

注意:key为多字段时,如果value是字符串,则表示使用相同条件。如果是一维数组,则第一个字段对应value的第一个元素,以此轮推。同样value若是二维数组,第几个字段就对应value的第几个元素。

辅助函数

可全局使用

  • psw(str):密码加密
  • _encrypt(str):数据加密
  • _decrypt(str):数据解密
  • getGuid():生成唯一序列号
  • json(array):返回json格式数据
  • checkForm(类型, 数据):验证数据,支持 网址(url)、邮箱(email)、手机(phone)、电话(telephone)、英文字母(en)
  • ip:获取客户端IP
  • isMobile:判断是否手机访问
  • redirect(网址, 状态码):跳转链接,默认302
  • url(str):生成网址,支持模块生成,如:index/a 或者 /admin/index/b
  • urlOther(type,str,page):其他类型URL生成,参考“进阶教程->链接->other的name说明“
  • pageInationHome:前台分页,参数(总数量, 分页大小, 当前页, 前台模块, 附加值)
  • RemoveSpaces(str):删除连续空格
  • array_filter_key(array, field):二维数组去除空元素,可根据指定字段去除
  • arraySequence(array, field, 方式):二维数组排序,可根据字段排序。排序方式:SORT_DESC 降序;SORT_ASC 升序
  • getContentByLength(内容, 长度):截取字符串指定长度,默认180
  • formatBysize(size):文件大小格式化
  • formatDate(date, level, format):日期格式化,支持格式级别。级别排序:秒,分,时,天,周,月,年,level默认7。format为未匹配日期格式化方式,如:'Y-m-d'
  • content2keyword(str,limit):内容中的标签字符替换成内链,limit为每一个标签替换的次数,默认1
  • subString(str, start, end):从指定位置截取字符串指定长度
  • randStr(长度, 是否包含特殊符号, 数据池):随机生成指定长度字符串,默认不包含特殊字符,数据池默认为A-Za-z0-9
  • arrayIdFilter(str):将1,2,3格式的数据过滤并格式化
  • clear_html(str, array):过滤指定的html标签(script,iframe,style,all),第二个参数是需要过滤标签的数组,如array('script','style')
  • uploadFiles(file, logId, pageId):上传文件
  • get_contents(url):获取远程数据
  • http_post(url,url_str/array, header=array()):POST提交数据
  • pluginCheck(name):检查插件是否安装并启用
  • pluginConfig(name):获取指定插件的配置
  • pluginDo(name, controller, action, data):运行指定插件的指定方法,controller和action默认index,data传递参数(字符串或数组)
  • rpMsg(信息, 返回地址, 是否自动返回):提示信息,若msg为404,则网页状态为404,其他仅提示文字信息

视图

引入视图:use rp\View;

模板赋值:

View::assign(name, value)

模板渲染:

View::display(模板文件名称)
//名称的话从模块视图根目录读取,否则从模块视图目录/控制器下读取

模板判断:

View::checkTemp(模板文件名称)
//判断主题模板文件是否存在

模板标签

在前端模板中使用,其中if、for、foreach支持标签嵌套

//include文件:
{include:/header}

//使用变量include
{include:$header}

//定义变量:
{$now=time()}

//使用变量:
{$cashFiles}

//变量默认值:
{$cashFiles|default=123}

//变量函数:
//多个函数用“|”隔开,变量是函数的第一参数,可不用传,否则用###表示
{$cashFiles|base64_encode}

//常量或后台配置:
{RP.is_develop}

//条件判断if语句:
{if $cashFiles}
	cashFiles对了
{elseif $cashFiles2}
	还行吧
{else}
	错了
{/if}

//执行函数:
{:time()}

//运行PHP代码:
{php}echo '12345';{php}

//执行钩子:
{hook:hookName}

//执行钩子,并传参数,支持引用,支持多参数
{hook:hookName(&$a, 'test',1)}

//遍历循环:
{foreach $list as $k=>$v}
	...
{/foreach}

//for循环:
{for $i=0;$i<10;$i++}
	...
{/for}

//三元运算:
{$a ? $a : $b}

//运算符:
//暂时支持+ - * / % 后++ 后--
{$a + $b}

扩展数据

文章和单页中都有扩展数据字段extend。使用方法如下

提交参数:extend_name,如:extend_BuyId
获取参数:文章/单页位于编辑上/下的钩子中携带有data参数,其中$data['extend']即为扩展数据,格式array();

示例

提交表单:<input type="text" name="extend_BuyId" value="1"/>
获取数据:$data['extend']['BuyId']


开发教程

模板制作

模板位置:/templates/index

模板所需文件

  • [必须]author.json:作者信息
  • [必须]index.php:首页
  • [必须]list.php:列表页
  • [必须]page.php:单页
  • [必须]search.php:搜索页
  • [必须]detail.php:内容页
  • [必须]special.php:专题页
  • preview.jpg:模板缩略图
  • 404.php:404页面,如果不需要可以删除
  • common.php:为模块化功能函数集合,如果不需要可以删除
  • setting.php:为模板配置文件,如果不需要配置可以删除
  • Hook.class.php:为模板钩子文件,如果不需要配置可以删除
  • password.php:为需要授权访问的页面模板文件(form post 参数pagepwd),如果使用系统自带的,可以删除
  • default.php:为默认的配置数据,return array()格式,可配合setting.php使用,不需要可以删除

若 分类、文章、单页、标签中指定了模板,请确定模板文件存在
文章列表页模板权重:文章分类列表模板 > list
文章内容页模板权重:文章指定模板 > 文章分类内容模板 > detail

404页面说明:

系统默认带有简易的404提示页面,也可以制作自己的404页面,只需要放置到模板文件夹中,系统会自动判断。同样404页面遵循模板标签的使用
404页面参数说明(同rpMsg方法的参数)

  • $code:状态码,404 or 500
  • $message:404提示信息
  • $url:回跳地址,默认back(-1)
  • $isAuto:是否自动返回

author.json说明

  • name: 模板名称
  • version: 模板版本,如:1.0
  • date: 模板日期
  • url:模板官方地址
  • description: 模板描述
  • author: 模板作者
  • authorEmail: 作者邮箱
  • authorUrl: 作者主页网址
name: '默认模板',
version: '1.0',
date:'2019-11-12 12:00:00',
url:'http://www.rpcms.cn/',
description: 'RPCMS默认模板',
author: 'rpcms',
authorEmail: 'rpcms@qq.com',
authorUrl: 'http://www.rpcms.cn/',

模板钩子说明

钩子文件名称:Hook.class.php
钩子空间命名:namespace template\index\模板文件;
挂载钩子方式:public function addHook(){...}
使用DOME:

$data=array(
	'admin_logs_edit_hook'=>'template\index\模板文件\hook::mytest',
);
return $data;

模板公共变量

使用方法:{$name}

  • App:系统主文件OBJECT,可自行打印查看包含数据
  • host:网站URL
  • title:标题
  • keywords:关键词
  • description:描述
  • webConfig:系统后台配置
  • tempConfig:模板配置
  • tempUrl:模板地址
  • user:用户,array [username,home,email,...]
  • listType:页面类型(除首页外),如list,author,search,date,tags
  • listId:页面ID值(除首页外),search时为搜索内容,tages时为标签ID,cate时为分类ID,special时为专题ID,logs时为文章ID,author时为用户ID,page时为单页ID,date时为日期字符串

模板公共常量:

  • TEMPURL:模板地址

列表(首页,列表页,搜索页,专题页)变量:

  • logList:文章列表
    • id
    • title:文章标题
    • authorId:作者ID
    • authorEmail:作者邮箱
    • author:作者昵称
    • cateId:分类ID
    • cateName:分类名称
    • cateUrl:分类URL地址
    • cateLogNum:分类文章数量
    • excerpt:简介
    • content:内容
    • tages:标签ID集合
    • tagesData:标签数据集合,数组形式
    • isTop:是否置顶,为1则置顶
    • views:阅读数量
    • comnum:评论数量
    • upnum:点赞数量
    • upateTime:最后更新时间
    • createTime:创建时间
    • status:状态;0发布,1待审,2草稿,-1下架
    • url:文章URL地址
    • extend:自定义扩展数据,数组形式
  • pageHtml:分页代码

单页/内容页变量:

  • data:页面数据
    • id
    • title:文章标题
    • alias:别名
    • authorId:作者ID
    • author:作者昵称
    • authorUrl:作者主页访问地址
    • password:授权访问密码
    • content:内容
    • isRemark:是否允许评论,为1则允许
    • comnum:评论数量
    • template:模板文件名称
    • createTime:创建时间
    • status:状态;0发布,1待审,2草稿,-1下架
    • extend:自定义扩展数据,数组形式
    • 以下是文章内容页面独有数据

    • cateId:分类ID
    • cateName:分类名称
    • cateUrl:分类URL地址
    • excerpt:简介
    • tages:标签集合;array [[id,name,url]...]
    • isTop:是否置顶,为1则置顶
    • views:阅读数量
    • upnum:点赞数量
    • upateTime:最后更新时间
    • 以下是单页内容页面独有数据

    • seo_key:seo关键词
    • seo_desc:seo描述
  • CommentData:评论数据
    • count:总数量
    • limit:分页大小
    • page:当前页
    • pageHtml:分页HTML
    • list:数据列表array ['lists'=>评论列表, 'top'=>顶级评论ID(推荐根据此显示评论列表]

专题页变量

  • special:专题数据
    • title:名称
    • subTitle:副标题
    • headimg:专题图片
    • alias:别名
    • seo_desc:描述
    • temp_list:模板名称,为空则为默认模板
    • createTime:最后更新时间
    • logNum:文章数量

交互说明:

  • /comment/addcom:评论提交地址,提交参数:
    • types:类型;logs:文章,pages:单页
    • vid:文章/单页ID
    • topId:上级评论ID
    • username:评论人昵称
    • email:评论人邮箱
    • home:评论人主页地址
    • content:评论内容
    • verifyCode:验证码,如果开启验证码则需提交此参数
  • /praise:点赞提交地址,提交参数 ID:文章ID

logMod类模块功能:

  • neighbor:相邻文章 array('prev'=>array(),'next'=>array())
  • related(文章data数据, 相关类型, 数量):相关文章;相关类型:分类,标签

插件制作

模板位置:/plugin
插件遵循模板标签使用方法(需继续 rp\plugin类)
插件命名空间格式:namespace plugin\插件文件夹名称(区分大小写);
插件视图赋值:$this->assign(name, value)
插件视图渲染:$this->display(文件名称),无需带上插件文件夹名称,系统会自动获取所用插件
插件后台操作验证:$this->checkFormAdmin(),推荐在__construct中使用
判断主题模板文件是否存在:$this->checkTemp(文件名称)
如:插件文件夹名为demo,显示视图引用模板是demo/temp文件,则$this->display('temp')
若显示视图引用模板是demo/template/temp2文件,则$this->display('template/temp')
引用当前模板视图模板$this->display('/header')
使用模板标签引用当前模板视图模板{include:/header}
后台运行插件方法(提交数据):host/admin/plugin/run.html?to=插件名称/控制器/方法,如http://rpcms.cn/admin/plugin/run.html?to=test/admin/mytest

插件所需文件

  • [必须]author.json:作者信息(同模板)
  • [必须]Index.class.php:插件主文件
  • Setting.class.php:插件配置文件
  • icon.png:插件图标

插件可使用预装变量,已封装在rp\Plugin中,可继承直接使用

  • App:同主文件App,使用:$this->App
  • webConfig:同webConfig配置,使用:$this->webConfig
  • Db:同Db数据库,使用:$this->Db
  • Db_prefix:数据库前缀,使用:$this->Db_prefix
  • setConfig:插件配置保存,使用:$this->setConfig(plugin, (array)data)
  • getConfig:插件配置获取,使用:$this->getConfig(plugin)
  • pluginName:当前插件名称,使用:$this->pluginName
  • pluginPath:当前插件相对路径(系统根目录),使用:$this->pluginPath
  • admin:管理员数据,checkFormAdmin验证通过方可使用

Index.class.php中主要函数说明

  • install:插件安装执行方法
  • uninstall:插件卸载执行方法
  • update:插件升级更新执行方法
  • addHook:插件需要挂载的钩子,需return array,如:
    $data=array(
    	'admin_top_menu'=>'plugin\test\index::mytest',
    );
    return $data;

Setting.class.php中主要函数说明

  • index:插件配置,显示配置页面
  • 插件数据保存已封装,只需在插件配置页面form中加入下方代码,submit提交时会自动保存插件,无需手动调用setConfig方法进行保存
    <input type="hidden" name="sendpost" value="1"/>

插件视图公共变量,使用方法:{$name}

  • webConfig:系统后台配置
  • baseUrl:系统根域名网址
  • App:系统主文件OBJECT
  • pluginPath:当前插件相对路径(系统根目录)

插件DEMO下载

其他说明

关于模板/插件的命名:小写英文字母、数字和下划线组合,不支持驼峰写法!

命名空间使用:

定义命名空间

<?php 
namespace template\index\defaults;

class Hook{
	...
}
?>
即为:根目录/template/index/defaults/目录下的Hook.class.php

使用定义的命名空间

<?php 
use template\index\defaults\Hook;

class test{
	public function testDemo(){
		$hook=new Hook();
		//若存在有静态变量或方法
		$a=Hook::静态变量名称
		$b=Hook::静态方法名称
	}
}
?>

Hook钩子参数扩展说明:

定义的Hook方法支持多参数传参,如果在php文件中直接通过静态方法doHook调用(如插件中使用),传的参数请用数组组装起来,同时支持引用。如:

<?php
$a='第一个参数,支持引用';
$b='第二个参数,不支持引用';
$c=1;
Hook::doHook('hookName',array(&$a,$b,$c));
?>
如果在模板中通过模板标签调用Hook,同样也支持多参数和变量引用,注意这里参数不用组装成数组,如:
{php}
$a='模板中的参数,支持引用';
$b='模板中的参数,不支持引用';
{/php}
{hook:hookName(&$a,$b)}				
				
在hook文件中如何接收参数呢,和平常的php写法一样,直接function接收就可以了,如:
public function hookName(&$a,$b,$c=''){
	echo 'a参数='.$a.'<br>';
	echo 'b参数='.$b.'<br>';
	echo 'c参数='.$c.'<br>';
	//更改$a参数的值
	$a='this is test';
}
				
注意:如果函数的参数有引用,传参也要引用,请保持前后一致。

sitemap地址说明:

xxx.com/sitemap