# 插件化
插件在根目錄下的addons中有示例可以參考。
需結合項目:[ThinkYXC-CMS](https://github.com/llllyang123/thinkyxc)使用,借鑒于[think-addons](https://github.com/zz-studio/think-addons),使插件更加容易管理、升級等
# 教程
## 創建插件
> 創建的插件可以在view視圖中使用,也可以在php業務中使用
安裝完成后訪問系統時會在項目根目錄生成名為`addons`的目錄,在該目錄中創建需要的插件。
下面寫一個例子:
### [](https://github.com/zz-studio/think-addons#創建test插件)創建test插件
> 在addons目錄中創建test目錄
### [](https://github.com/zz-studio/think-addons#創建鉤子實現類)創建鉤子實現類
> 在test目錄中創建 Plugin.php 類文件。注意:類文件首字母需大寫
~~~
<?php
namespace addons\test; // 注意命名空間規范
use think\Addons;
/**
* 插件測試
* @author byron sampson
*/
class Plugin extends Addons // 需繼承think\Addons類
{
// 該插件的基礎信息
public $info = [
'name' => 'test', // 插件標識
'title' => '插件測試', // 插件名稱
'description' => 'thinkph6插件測試', // 插件簡介
'status' => 0, // 狀態
'author' => 'byron sampson',
'version' => '0.1'
];
/**
* 插件安裝方法
* @return bool
*/
public function install()
{
return true;
}
/**
* 插件卸載方法
* @return bool
*/
public function uninstall()
{
return true;
}
/**
* 實現的testhook鉤子方法
* @return mixed
*/
public function testhook($param)
{
// 調用鉤子時候的參數信息
print_r($param);
// 當前插件的配置信息,配置信息存在當前目錄的config.php文件中,見下方
print_r($this->getConfig());
// 可以返回模板,模板文件默認讀取的為插件目錄中的文件。模板名不能為空!
return $this->fetch('info');
}
}
~~~
### 創建插件配置文件
> 在test目錄中創建config.php類文件,插件配置文件可以省略。
~~~html
<?php
return [
'display' => [
'title' => '是否顯示:',
'type' => 'radio',
'options' => [
'1' => '顯示',
'0' => '不顯示'
],
'value' => '1'
]
];
~~~
###創建插件狀態文件
~~~
{
"name": "tese",
"title": "測試插件",
"description": "測試插件",
"status": 0,
"author": "愛途平臺",
"version": "1.0",
"demo_url": "http://www.aitu666.cn",
"author_url": "http://www.aitu666.cn",
"hasAdmin": "0"
}
~~~
hasAdmin為是否有后臺文件,如果有會自動匹配跳轉后臺文件頁面按鈕,0=沒有,1=有
更多詳情參考根目錄下的示例插件
### [](https://github.com/zz-studio/think-addons#創建鉤子模板文件)創建鉤子模板文件
> 在test->view目錄中創建info.html模板文件,鉤子在使用fetch方法時對應的模板文件。
~~~html
<h1>hello tpl</h1>
如果插件中需要有鏈接或提交數據的業務,可以在插件中創建controller業務文件,
要訪問插件中的controller時使用addon_url生成url鏈接。
如下:
<a href="{:addons_url('Action/link')}">link test</a>
或
<a href="{:addons_url('test://Action/link')}">link test</a>
格式為:
test為插件名,Action為controller中的類名[多級控制器可以用.分割],link為controller中的方法
~~~
### [](https://github.com/zz-studio/think-addons#創建插件的controller文件)創建插件的controller文件
> 在test目錄中創建controller目錄,在controller目錄中創建Index.php文件 controller類的用法與tp6中的controller一致
~~~html
<?php
namespace addons\test\controller;
class Index
{
public function link()
{
echo 'hello link';
}
}
~~~
## [](https://github.com/zz-studio/think-addons#使用鉤子)使用鉤子
> 創建好插件后就可以在正常業務中使用該插件中的鉤子了 使用鉤子的時候第二個參數可以省略
### [](https://github.com/zz-studio/think-addons#模板中使用鉤子)模板中使用鉤子
~~~html
<div>{:hook('testhook', ['id'=>1])}</div>
~~~
### [](https://github.com/zz-studio/think-addons#php業務中使用)php業務中使用
> 只要是thinkphp6正常流程中的任意位置均可以使用
~~~html
hook('testhook', ['id'=>1])
~~~
### [](https://github.com/zz-studio/think-addons#插件公共方法)插件公共方法
~~~html
/**
* 處理插件鉤子
* @param string $event 鉤子名稱
* @param array|null $params 傳入參數
* @param bool $once 是否只返回一個結果
* @return mixed
*/
function hook($event, $params = null, bool $once = false);
/**
* 讀取插件的基礎信息
* @param string $name 插件名
* @return array
*/
function get_addons_info($name);
/**
* 獲取插件Plugin的單例
* @param string $name 插件名
* @return mixed|null
*/
function get_addons_instance($name);
/**
* 插件顯示內容里生成訪問插件的url
* @param $url 在插件控制器中可忽略插件名,在非插件中生成時需指定插件名。例:插件名://控制器/方法
* @param array $param
* @param bool|string $suffix 生成的URL后綴
* @param bool|string $domain 域名
* @return bool|string
*/
function addons_url($url = '', $param = [], $suffix = true, $domain = false);
~~~
## 插件目錄結構
### [](https://github.com/zz-studio/think-addons#最終生成的目錄結構為)最終生成的目錄結構為
~~~html
www WEB部署目錄(或者子目錄)
├─addons 插件目錄
├─app 應用目錄
│ ├─controller 控制器目錄
│ ├─model 模型目錄
│ ├─ ... 更多類庫目錄
│ │
│ ├─common.php 公共函數文件
│ └─event.php 事件定義文件
│
├─config 配置目錄
│ ├─app.php 應用配置
│ ├─cache.php 緩存配置
│ ├─console.php 控制臺配置
│ ├─cookie.php Cookie配置
│ ├─database.php 數據庫配置
│ ├─filesystem.php 文件磁盤配置
│ ├─lang.php 多語言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中間件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 視圖配置
│
├─view 視圖目錄
├─route 路由定義目錄
│ ├─route.php 路由定義文件
│ └─ ...
│
├─public WEB目錄(對外訪問目錄)
│ ├─index.php 入口文件
│ ├─router.php 快速測試文件
│ └─.htaccess 用于apache的重寫
│
├─extend 擴展類庫目錄
├─runtime 應用的運行時目錄(可寫,可定制)
├─vendor Composer類庫目錄
├─.example.env 環境變量示例文件
├─composer.json composer 定義文件
├─LICENSE.txt 授權說明文件
├─README.md README 文件
├─think 命令行入口文件
~~~