## 插件開發
插件是用于擴展系統的功能的一些獨立“組件”。
插件的定位是用于實現某些簡單的顯示及數據處理的功能擴展。所以我們的初衷是插件的開啟關閉,不會影響原有數據。
為了管理的方便,我們在后臺給插件默認提供了插件列表頁,用于插件的安裝、卸載、設置、插件后臺等功能。
自動生成插件:[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開發者賬戶
- 多主題開發
- 新建主題
- 目錄結構
- 模板變量
- 定制安裝部署