## 插件开发
插件是用于扩展系统的功能的一些独立“组件”。
插件的定位是用于实现某些简单的显示及数据处理的功能扩展。所以我们的初衷是插件的开启关闭,不会影响原有数据。
为了管理的方便,我们在后台给插件默认提供了插件列表页,用于插件的安装、卸载、设置、插件后台等功能。
自动生成插件:[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,一般用于前端。
- 简介
- 环境要求
- 安装系统
- 目录结构
- 常见问题
- 基础知识
- 编辑器
- 前端规范
- 前端框架文档
- Builder教程
- Builder的来历
- ListBuilder使用
- setMetaTitle
- addTopButton
- setSearch
- addSearchItem
- setTabNav
- addTableColumn
- setTableDataList
- setTableDataListKey
- setTableDataPage
- addRightButton
- alterTableData
- setExtraHtml
- setTemplate
- FormBuilder使用
- setMetaTitle
- setTabNav
- setExtraItems
- setPostUrl
- addFormItem
- setFormData
- setExtraHtml
- setAjaxSubmit
- setTemplate
- 扩展FormBuilder
- 模块开发
- 创建模块
- 描述文件
- 模型( M )
- 模版( V )
- 控制器( C )
- API接口
- 核心模块
- 文件上传
- 微信小程序模块
- 注册登陆接口
- 钱包模块
- 统一支付
- Cms模块
- 幻灯片接口
- 文档列表接口
- 文档详情接口
- 发表评论接口
- 评论列表接口
- 收藏的文档接口
- 收藏接口
- 分类列表接口
- IM模块
- 发送消息接口
- 最近聊天列表接口
- 查询新消息接口
- 插件相关
- 短信插件
- 支付插件
- 支付宝支付
- 微信支付
- 站群模块
- 模板开发
- 准备工作
- 目录结构
- 数据调用
- 专题
- 插件开发
- 图片显示
- 获取用户信息
- 判断用户登陆
- 表单提交AjaX
- 文件上传
- 2.0兼容写法
- 模板标签
- 核心模块
- Cms模块
- 栏目分类调用
- Cordova
- 配置跨域支持
- 本地开发调试教程
- 打包成apk和ipa
- 自定义APP信息
- 常见问题
- 申请Apple开发者账户
- 多主题开发
- 新建主题
- 目录结构
- 模板变量
- 定制安装部署