🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 插件开发 插件是用于扩展系统的功能的一些独立“组件”。 插件的定位是用于实现某些简单的显示及数据处理的功能扩展。所以我们的初衷是插件的开启关闭,不会影响原有数据。 为了管理的方便,我们在后台给插件默认提供了插件列表页,用于插件的安装、卸载、设置、插件后台等功能。 自动生成插件:[AutoBuilder](http://www.lingyun.net/appstore/ab_addon/index.html "AutoBuilder") ##适用对象 本文的适用于对ThinkPHP3.2.3版本行为扩展机制有一定了解的开发者。 ##钩子 钩子是插件挂载的标签位。包括系统钩子和自定义钩子两大类。 ##系统钩子列表 >系统钩子一般可以在公共模板文件Public/layout.html中找到。如: ```php {:Hook('PageFooter')} ``` | 钩子(Hook) | 说明| |--------|--------| | AdminIndex | 后台首页小工具 | |FormBuilderExtend|FormBuilder类型扩展Builder| |UploadFile|上传文件钩子| |PageHeader|页面header钩子,一般用于加载插件CSS文件和代码| |PageFooter|页面footer钩子,一般用于加载插件CSS文件和代码| |CommonHook|通用钩子,自定义用途,一般用来定制特殊功能| ##自定义钩子 如新建一个自定义钩子,名称为:myHook,则在视图模板中添加以下代码即可: ```php {:Hook('myHook')} ``` ##插件结构 插件目录位于Addons。 解耦如下: 插件目录如下: >|-wwwroot/ |-Addons/ |-Addons/Demo/[插件目录,需与插件名称一致] |-Addons/Controller/[插件控制器目录] |-Addons/Controller/DemoController.class.php[插件控制器] |-Addons/Model/[插件模型目录] |-Addons/Model/DemoModel.class.php[插件模型] |-Addons/img/[可选] |-Addons/css/[可选] |-Addons/js/[可选] |-Addons/DemoAddon.class.php [插件类,必须] |-Addons/config.php [插件配置文件] |-Addons/index.html [插件使用的视图文件,可自定义文件名] ##插件配置 插件配置位于插件目录的config.php文件中: 数组的key即为配置的名称 <ul> <li>title:显示名称</li> <li>type:配置值类型,可参考FormBuilder支持的类型。常用类型有:text,array,toggle,select等</li> <li>options:选项。一般用于select、toggle、radio设置数据源</li> <li>value:默认值</li> </ul> return array( 'status' => array( 'title' => '是否开启:', 'type' => 'radio', 'options' => array( '1' => '开启', '0' => '关闭', ), ), 'text' => array( 'title' => '提示信息', 'type' => 'text', 'value' => '这是提示信息!', ), 'time' => array( 'title' => '自动关闭时间', 'type' => 'num', 'value' => '3000', ), ); ##命名空间 插件控制器命名空间为:Addons/插件名/Controller 插件模型命名空间为:Addons/插件名/Model 注意:控制器和模型并不是插件必须的。 ##插件类 DemoAddon.class.php该文件需继承Common\Controller\Addon; 该类提供了getConfig()方法用于获取插件配置 特别注意:例子中的PageFooter()方法需与挂在的钩子名称一致。示例中的PageFooter()使用了视图并调用了$this->display()方法,因此在钩子位置会输出该插件渲染的html。当然,插件并不一定要输出html。 自定义插件后台列表: 设置$custom_adminlist即可(可参考以下文件) namespace Addons\Demo; use Common\Controller\Addon; /** * 在线留言插件 * @author jry 598821125@qq.com */ class EnquiryAddon extends Addon { /** * 插件信息 * @author jry <598821125@qq.com> */ public $info = array( 'name' => 'Demo', 'title' => 'Demo插件', 'description' => 'Demo插件', 'status' => 1, 'author' => 'Demo', 'version' => '1.6.0', 'icon' => 'fa fa-wechat', 'icon_color' => '#5E5DCA', ); /** * 自定义插件后台 * @author jry <598821125@qq.com> */ public $custom_adminlist = 'Demo://Demo/index'; //挂载自定义钩子 $hooks=array( '0'=>'myHook', ); /** * 插件安装方法 * @author jry <598821125@qq.com> */ public function install() { return true; } /** * 插件卸载方法 * @author jry <598821125@qq.com> */ public function uninstall() { return true; } /** * 钩子方法 * @author jry <598821125@qq.com> */ public function PageFooter($param) { $config = $this->getConfig(); $this->assign('config', $config); if ($config['status']) { $this->display('index'); } } ##框架提供的方法和常量 __ADDONROOT__ :插件目录。在Demo插件的视图文件中通过它即可定位到Addons/Demo目录 D('Addons://插件名/模型名'):实例化相应插件模型 addons_url('插件名://控制器名/方法名'):生成相应插件控制器的url,一般用于前端。