一个轻量型内容管理/博客系统,自由方便,灵活度高
RPCMS是一款基于PHP+MYSQL的轻量型内容管理/博客系统,支持PHP5.6版本以上,支持win/Linux系统。
它虽然小巧,但有着强大的扩展性、丰富的插件接口和大量的模板。
系统统一采用模板标签,开发更方便!
类 | 名称 | 方法 |
---|---|---|
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 加载模板并显示 |
<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>
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }
钩子 | 名称 | 说明 |
---|---|---|
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;
//value可以为字符串或数组或二维数组,如: Config::set('name1', 'this is name1'); Config::set('name2', ['value1','value2']); Config::set('name3', ['name3_1'=>'value3_1', 'name3_2'=>'value3_2']);
Config::get('name1'); Config::get('name3.name3_1');
Config::get('webConfig.webName');
引入缓存:use rp\Cache;
Cache::upddate(name) //当name为空的时候,更新所有缓存
Cache::read(name)
若POST,GET,REQUEST,SERVER获取全部数据是,写法:input('post.')
引入钩子:use rp\Hook;
Hook::addHook('hookName', 'plugin\demo\index::action')
Hook::deleHook('hookName','plugin\demo\index::action')
/* $args为钩子的传递参数(多参数用数组形式),$isReturn默认false, 当$args传递钩子的指定方法时,$isReturn可为钩子的传递参数,第四参数可为$isReturn。 当$isReturn为true时,如果hook拥有多个,那么除第一个外其他不会执行。 举例: */ //运行hookName钩子 Hook::doHook('hookName') //运行hookName钩子带参数 Hook::doHook('hookName','this is args') //运行hookName钩子带参数并返回 Hook::doHook('hookName','this is args',true) //运行hookName钩子的指定方法 Hook::doHook('hookName','plugin\demo\index::action') //运行hookName钩子的指定方法并返回 Hook::doHook('hookName','plugin\demo\index::action',true) //运行hookName钩子的指定方法并带参数 Hook::doHook('hookName','plugin\demo\index::action','this is args') //运行hookName钩子的指定方法带参数并返回 Hook::doHook('hookName','plugin\demo\index::action','this is args',true)
引入URL:use rp\Url;
Url::setCode(code)
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说明
引入数据库:use rp\Db;
//注意:必须Db::name()开始
$res=Db::name('tableName')->where(['id'=>1])->find();
可用表达式:=, <>, !=, >, >=, <, <=, like, not like, in, not in, between, not between, exists, not exists, exp, find_in_set
字符串形式:
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的第几个元素。
可全局使用
引入视图: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,'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
若 分类、文章、单页、标签中指定了模板,请确定模板文件存在
文章列表页模板权重:文章分类列表模板 > list
文章内容页模板权重:文章指定模板 > 文章分类内容模板 > detail
系统默认带有简易的404提示页面,也可以制作自己的404页面,只需要放置到模板文件夹中,系统会自动判断。同样404页面遵循模板标签的使用
404页面参数说明(同rpMsg方法的参数)
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}
以下是文章内容页面独有数据
以下是单页内容页面独有数据
模板位置:/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
$data=array( 'admin_top_menu'=>'plugin\test\index::mytest', ); return $data;
<input type="hidden" name="sendpost" value="1"/>
关于模板/插件的命名:小写英文字母、数字和下划线组合,不支持驼峰写法!
命名空间使用:定义命名空间
<?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::静态方法名称 } } ?>rss地址说明:
xxx.com/rss