# 開發插件
開發標準
插件不得篡改、替換、cms系統文件,只允許在不影響原有功能的情況添加配置參數,如【後臺菜單配置、播放組配置】。如果每個開發者都不遵守該規則,那麽應用市場面臨各種相互不兼容問題,嚴重的還會影響cms本身功能以及安全問題,請廣大開發者們務必遵守。
# 創建插件
創建的插件可以在view
視圖中使用,也可以在php
業務中使用
安裝完成後訪問系統時會在項目根目錄生成名為addons的目錄,在該目錄中創建需要的插件。
下面寫一個例子:
- 創建
mydemo
插件 - 在
addons
目錄中創建mydemo
目錄 - 創建鉤子實現類
- 在
mydemo
目錄中創建Mydemo.php
類文件。註意:類文件首字母需大寫
<?php
namespace addons\mydemo; // 註意命名空間規範
use thinkAddons;
/**
* 插件測試
* @author byron sampson
*/
class Mydemo extends Addons // 需繼承thinkaddonsAddons類
{
// 該插件的基礎信息
public $info = [
'name' => 'mydemo', // 插件標識
'title' => '插件測試', // 插件名稱
'description' => 'thinkph5插件測試', // 插件簡介
'status' => 0, // 狀態
'author' => 'byron sampson',
'version' => '0.1'
];
/**
* 插件安裝方法
* @return bool
*/
public function install()
{
return true;
}
/**
* 插件卸載方法
* @return bool
*/
public function uninstall()
{
return true;
}
/**
* 實現的mydemohook鉤子方法
* @return mixed
*/
public function mydemohook($param)
{
// 調用鉤子時候的參數信息
print_r($param);
// 當前插件的配置信息,配置信息存在當前目錄的config.php文件中,見下方
print_r($this->getConfig());
// 可以返回模板,模板文件默認讀取的為插件目錄中的文件。模板名不能為空!
return $this->fetch('info');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 創建插件配置文件
在mydemo
目錄中創建config.php
類文件,插件配置文件可以自定義一些參數,然後在程序任何位置使用 get_addon_config(mydemo)
來獲取定義的參數,後臺打開配置視圖
為插件按鈕的配置
入口。
完整的config.php
示例
<?php
return array (
0 => array (
'name' => 'rewrite', # 偽靜態,在蘋果cms開啟路由模式後可在rewrite數組下的 value 添加路由規則
'title' => '偽靜態',
'type' => 'array', # 數組類型
'content' => array (),
'value' => array (
'index' => '/mydemo$',
'api/index' => '/api$'
),
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
1 => array (
'name' => 'open',
'title' => '多選框',
'type' => 'radio', # radio 多選框類型
'content' => array (
'on' => '啟用',
'off' => '關閉',
),
'value' => 'off',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
2 => array (
'name' => 'open',
'title' => '復選框',
'type' => 'checkbox', # 復選框 類型
'content' => array (
'on' => '啟用',
'off' => '關閉',
),
'value' => 'off',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
3 => array (
'name' => 'menu',
'title' => '輸入框',
'type' => 'string', # 字符串 輸入框類型
'content' => array (),
'value' => '1,2,3,4',
'rule' => 'required',
'msg' => '',
'tip' => '備註文字',
'ok' => '',
'extend' => '', #string 類型支持 extend參數,如:style="line-height: 1.8;"
),
4 => array (
'name' => 'hot_banner',
'title' => '下拉菜單',
'type' => 'selects', # 下拉菜單類型
'content' => array (
0 => '小圖風格',
1 => '巨幕風格',
),
'value' => '1',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
5 => array (
'name' => 'tiptext',
'title' => '文本框',
'type' => 'text', # textarea 文本框類型
'content' => array (),
'value' => '大家好我是老王,建站就用蘋果cms',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => 'style="height: 150px;"', # text 類型支持 extend參數,如:style="line-height: 1.8;"
),
6 => array (
'name' => 'go_time',
'title' => '日期選擇',
'type' => 'datetime', # 日期選擇器 類型
'content' => array (),
'value' => '1629560562',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
7 => array (
'name' => 'go_pic',
'title' => '上傳圖片',
'type' => 'images', # 上傳圖片表單類型
'content' => array (),
'value' => '',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
8 => array (
'name' => 'go_file',
'title' => '上傳文件',
'type' => 'files', # 上傳文件表單類型
'content' => array (),
'value' => '',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
9 => array (
'name' => 'go_bool',
'title' => '雙選表單',
'type' => 'bool', # 雙選表單類型
'content' => array (),
'value' => '',
'rule' => 'required',
'msg' => '',
'tip' => '',
'ok' => '',
'extend' => '',
),
);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# 創建鉤子模板文件
在mydemo
目錄中創建info.html
模板文件,鉤子在使用fetch
方法時對應的模板文件。
<h1>hello tpl</h1>
- 如果插件中需要有鏈接或提交數據的業務,可以在插件中創建controller業務文件,
- 要訪問插件中的controller時使用addon_url生成url鏈接。
- 如下:
<a href="{:addon_url('mydemo://Action/link')}">link mydemo</a>
- 格式為:
mydemo
為插件名,Action
為controller
中的類名,link
為controller
中的方法- 創建插件的
controller
文件 - 在
mydemo
目錄中創建controller
目錄,在controller
目錄中創建Action.php
文件controller
類的用法與tp5
中的controller
一致
<?php
namespace addons\mydemo\Controller;
class Action
{
public function link()
{
echo 'hello link';
}
}
2
3
4
5
6
7
8
9
10
如果需要使用view模板則需要繼承thinkaddonsController類 模板文件所在位置為插件目錄的view中,規則與模塊中的view規則一致
<?php
namespace addons\mydemo\Controller;
use think\addons\Controller;
class Action extends Controller
{
public function link()
{
return $this->fetch();
}
}
2
3
4
5
6
7
8
9
10
11
12
# 行為事件【鉤子】
在Mydemo.php
自定義 mydemohook
事件後,就可以在正常業務中使用該插件中的鉤子了 使用鉤子的時候第二個參數可以省略。蘋果cms中的行為支持ThinkPHP5的所有行為,以下是所有所支持的行為事件。
標簽位 | 描述 | 類型說明 |
---|---|---|
app_init | 應用初始化標簽位 | 系統 |
app_begin | 應用開始標簽位 | 系統 |
module_init | 模塊初始化標簽位 | 系統 |
action_begin | 控製器開始標簽位 | 系統 |
view_filter | 視圖輸出過濾標簽位 | 系統 |
app_end | 應用結束標簽位 | 系統 |
log_write | 日誌write方法標簽位 | 系統 |
log_write_done | 日誌寫入完成標簽位 | 系統 |
response_end | 輸出結束標簽位 | 系統 |
response_send | 響應發送標簽位 | 系統 |
TIP
使用行為時在Mydemo.php
中添加上對應的方法,插件在安裝時、禁用、啟用即可自動註冊行為。但一定請註意在Mydemo.php
中編寫行為方法是使用的是駝峰式規則,例如view_filter
,方法名則為viewFilter
,如果方法名使用view_filter
則不會註冊成功
示例代碼
- 比如我要寫一個功能希望它 在
視圖輸出
時自動執行,那麽只需要在Mydemo.php
創建viewFilter
方法即可,當插件啟用時自動註冊到view_filter
中,並且全局運行,不需要你在前臺控製器或者模板中手動調用。
public function viewFilter(&$request)
{
if(ENTRANCE == "index"){ # 使用 ENTRANCE 判斷是否為前臺
$isMobile = 0;
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
$uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|meizu|cldc|midp|iphone|wap|mobile|android)/i";
if((preg_match($uachar, $ua))) {
$isMobile = 1;
echo '手機端';
}else{
echo '電腦端';
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
模板中調用自定義行為
<div>{:hook('mydemohook', ['id'=>1])}</div>
php中調用自定義行為 只要是thinkphp5正常流程中的任意位置均可以使用
hook('mydemohook', ['id'=>1])
最終生成的目錄結構為
maccms
└─ addons
│ └─mydemo
│ └─controller
│ │ └─Action.php
│ │─view
│ │ └─action
│ │ └─link.html
| │─config.php
| │─info.ini
| │─Mydemo.php
│─application
│─thinkphp
│─extend
│─vendor
2
3
4
5
6
7
8
9
10
11
12
13
14
15
溫馨提示
以上技術資料由 大圖模板 (opens new window) 獨家整理提供,轉載進標明出處,感謝您的配合!