> 插件是用于擴展系統的功能的一些獨立“組件”。
插件的定位是用于實現某些簡單的顯示及數據處理的功能擴展。所以我們的初衷是插件的開啟關閉,不會影響原有數據。 為了管理的方便,我們在后臺給插件默認提供了插件列表頁,用于插件的安裝、卸載、設置、插件后臺等功能。
**本文的適用于對ThinkPHP3.2.3版本行為擴展機制有一定了解的開發者。**
**插件結構**
插件目錄位于Addons。 解耦如下:
插件目錄如下:
~~~
Addons 系統插件目錄
├─Demo Demo插件目錄
│ │ ├─Controller 前臺控制器目錄
│ │ │ ├─DemoController.class.php 用戶控制器
│ │ ├─Model 模型目錄
│ │ │ ├─DemoModel.class.php 用戶模型
│ │ ├─TagLib 前臺標簽庫目錄
│ │ └─View 模塊視圖文件目錄
│ │ └─Sql SQL文件目錄
│ │ │ ├─install.sql 安裝sql文件
│ │ │ ├─uninstall.sql 安裝sql文件
│ │ ├─DemoAddon.class.php 用戶模塊配置文件(獨立于TP的配置文件)
~~~
**插件配置**
插件配置位于插件目錄的config.php文件中: 數組的key即為配置的名稱
> title:顯示名稱
> type:配置值類型,可參考FormBuilder支持的類型。常用類型有:text,array,toggle,select等
> options:選項。一般用于select、toggle、radio設置數據源
> value:默認值
~~~
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,一般用于前端。
~~~
- 序言
- 基礎
- 安裝
- 開發規范
- 目錄結構
- 表單生成器
- setMetaTitle
- setTabNav
- setExtraItems
- setPostUrl
- addFormItem
- setFormData
- setExtraHtml
- setAjaxSubmit
- setTemplate
- 表格生成器
- setMetaTitle
- addTopButton
- addTableColumn
- setTableDataList
- setTableDataListKey
- addRightButton
- setTableDataPage
- setSearch
- setTabNav
- addSearchItem
- alterTableData
- setExtraHtml
- setTemplate
- 公共函數
- 后臺管理
- 系統功能
- 系統設置
- 導航管理
- 幻燈管理
- 配置管理
- 上傳管理
- 用戶權限
- 用戶管理
- 管理員管理
- 用戶組管理
- 擴展中心
- 功能模塊
- 插件管理
- 模塊
- opencmf.php
- 目錄結構
- 開發規范
- 插件
- 系統鉤子列表
- 插件開發
- 主題
- 新建主題
- 模板變量
- 模板標簽
- 附錄
- 網站配置
- 常見問題
- 更新日志
- 關于零云