> 插件目录存放在 `A/exts`文件夹下面
> 安装插件的时候,把插件文件夹放到此处即可
## 举例说明
根据官方安装包里面的test插件demo来说明
~~~
test 插件文件夹
├─class 存放扩展类,该扩展类会被安装的时候直接复制到FrPHP/Extend下面
├─controller
│ ├─admin 后台控制器存放位置,安装的时候直接复制到A/plugins下面
│ └─home 前台控制器存放位置,安装的时间直接复制到Home/plugins下面
├─tpl
│ ├─plugins-descripiton.html 插件安装说明,插件的简介,使用方法
│ └─plugins-body.html 插件配置文件,自己构造需要存放的参数表单
├─config.php 插件配置说明文件
├─PluginsController.php 插件控制器,安装,卸载,数据处理
... 更多插件的其他文件,可以自由放置
~~~
config.php
~~~
return [
'name'=>'极致插件DEMO',//插件名,必须与插件文件夹名字相同
'desc'=>'这是一个极致插件开发的案例展示',//插件介绍
'author'=>'留恋风2581047041@qq.com',//作者介绍,这里可以把自己的联系方式带上去,方便用户沟通
'version'=>'1.0',//插件版本,默认1.0为最低版本
'update_time'=>'2019-08-14',//插件更新时间,格式:Y-m-d
'module'=>'Home',//插件应用的模块,Home表示前台模块,Admin表示后台模块
];
~~~
PluginsController.php
~~~
<?php
namespace A\exts;
use FrPHP\lib\Controller;
use FrPHP\Extend\Page;
class PluginsController extends Controller {
//自动执行
public function _init(){
/**
继承系统默认配置
**/
//检查当前账户是否合乎操作
if(!isset($_SESSION['admin']) || $_SESSION['admin']['id']==0){
Redirect(U('Login/index'));
}
if($_SESSION['admin']['isadmin']!=1){
if(strpos($_SESSION['admin']['paction'],','.APP_CONTROLLER.',')!==false){
}else{
$action = APP_CONTROLLER.'/'.APP_ACTION;
if(strpos($_SESSION['admin']['paction'],','.$action.',')==false){
$ac = M('Ruler')->find(array('fc'=>$action));
Error('您没有【'.$ac['name'].'】的权限!',U('Index/index'));
}
}
}
$webconf = webConf();
$this->webconf = $webconf;
$customconf = get_custom();
$this->customconf = $customconf;
//插件模板页目录
$this->tpl = '@'.dirname(__FILE__).'/tpl/';
/**
在下面添加自定义操作
**/
}
//执行SQL语句在此处处理,或者移动文件也可以在此处理
public function install(){
//检查是否已安装该插件,对应的插件文件是否已经存在
//执行SQL,注册hook(控制器方法覆盖不需要注册hook)
return true;
}
//卸载程序,对新增字段、表等进行删除SQL操作,或者其他操作
public function uninstall(){
//对hook表内注册的hook进行删除
return true;
}
//安装页面介绍,操作说明
public function desc(){
$this->display($this->tpl.'plugins-description.html');
}
//配置文件,插件相关账号密码等操作
public function setconf($plugins){
//将插件赋值到模板中
$this->plugins = $plugins;
$this->config = json_decode($plugins['config'],1);
$this->display($this->tpl.'plugins-body.html');
}
//获取插件内提交的数据处理
public function setconfigdata($data){
M('plugins')->update(['id'=>$data['id']],['config'=>json_encode($data,JSON_UNESCAPED_UNICODE)]);
setCache('hook',null);//清空hook缓存
JsonReturn(['code'=>0,'msg'=>'设置成功!']);
}
}
~~~
- 引言
- 条款
- 开始使用
- 模板标签
- 公共配置
- 系统配置
- 自定义配置
- 网站栏目
- 全局栏目属性
- 导航栏相关
- 当前栏目下的直系下级
- 当前栏目下的直系上级
- 栏目详情页
- 栏目列表页
- 栏目分页
- 输出三级及三级以上栏目
- 当前位置面包屑
- 获取当前栏目的顶级栏目
- 直播讲解栏目相关
- 文章详情页
- 基本内容
- 点赞
- 收藏
- 相关文章
- 输出新增字段
- 商品详情页
- 基本内容
- 输出新增字段
- 商品图集
- 点赞
- 收藏
- *点评星星
- 加入购物车
- *评论
- 相关商品
- 自定义字段
- 原样输出
- 单选字段
- 多选字段
- loop标签
- 通用说明
- loop分页
- 案例说明
- like使用
- 怎么判断loop没有数据
- limit使用
- day参数
- table缺省参数
- 单选多选相关
- 单选字段输出
- 多选字段输出
- 特殊输出
- 输出换行
- 替换字符串
- 输出被解析的HTML原句
- 截取字符串
- 内容body去除HTML
- 分割字符输出
- 人性化时间显示
- 搜索功能
- 单模块搜索
- 多模块搜索
- 搜索扩展
- 搜索结果列表页
- 会员模块
- 判断是否登录
- 判断是否评论
- 计算评论数
- 如果判断会员组是否权限
- 如何输出分组信息
- 如何输出所有用户分组
- 如何输出所有会员
- 输出某个会员发布的内容
- 查询一个用户的所有信息
- 输出我的粉丝列表
- 输出我的关注列表
- 获取粉丝数
- 获取关注数
- 判断是否关注
- 关注与取消关注链接
- 判断会员是否购买该商品
- foreach标签
- for标签
- fun标签
- php标签
- 不解析标签
- if..else..标签
- screen筛选标签
- 客户端判断
- 轮播图
- 友情链接
- 自定义图集输出
- Tags标签调用及使用说明
- 网站留言调用
- 自定义单页
- 各种统计
- 各种计数显示数
- 文章归档内容归档
- 系统架构
- 高级功能
- ajax数据交互
- ajax在栏目页的应用
- ajax在screen筛选中的应用
- screen多选筛选
- Message留言表单
- 万能表单
- 多语言支持
- 系统高级配置说明
- 网站动态链接
- 邮件发送
- 自定义路由配置
- 插件开发
- 控制器方法覆盖(cover)[简单]
- 控制器方法钩子(hook)[复杂]
- 制成后台安装插件
- 微信小程序
- 开始起步
- 小程序开发
- API访问接口数据
- 轮播图(幻灯片)
- 访问栏目列表
- 详情页查询
- 栏目详情查询
- 留言接口
- 附录
- 时间
- 富文本编辑器导航
- 伪静态配置
- 二维码生成
- 常见问题
- 静态生成HTML页面失败问题
- 为什么默认模板打开首页很慢,而打开后台却很快?
- 如何判断首页、栏目页、内容页、单页
- 视频教程
- 版本更新
- 宝塔一键部署