🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 插件目录存放在`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'=>'设置成功!']); } } ~~~