# 8. 創建菜單
## 創建后臺菜單
菜單數據以數組形式定義,定義好之后可以通`create_menu`函數手動創建菜單,通過`del_menu`函數來手動刪除菜單。當然,除了以上方式還支持系統自動判斷導入菜單,請參考下面的自動導入方式。
## 字段說明
> 2.1.220220版本之前,字段需要填寫完整
字段名說明默認值是否必填parent\_id父菜單ID或父菜單的name,默認0,表示最頂級0-title菜單名稱,菜單多語言目前需要在admin\_route后臺路由事件中手動導入菜單語言包-必填name權限規則-必填route路由-icon圖標fas fa-align-ustify/far fa-circle-remark備注-weigh排序0-type類型:0-權限規則,1-菜單,2-菜單頭(提供的額外標識)1-child子級菜單,有子級的話按一級菜單字段填寫即可--1. name,權限規則
寫法:控制器/方法,二級文件夾則是文件夾名/控制器/方法,注意二級需要填寫路由
2. route,路由地址
寫法:文件夾名.控制器/方法,常用于有文件夾的情況,注意是“點”
3. icon,圖標
基于`fontawesome`,一級菜單默認為`fas fa-align-justify`,二級菜單默認`far fa-circle` 圖標地址:[https://fa5.dashgame.com/#/圖標](https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87)
4. type,菜單類型
未填寫`type`時系統會自動判斷菜單類型,在認為有子級情況下認為是菜單。若有特殊情況,您需要填寫`type`字段
## 自動導入示例
在插件名稱類里面增加公共屬性`$menu`,在安裝時檢測到有這個屬性就會自動導入,另外在`卸載`、`啟用`、`禁用`、`更新`等操作時系統會自動對菜單進行相應的操作,例如插件禁用,菜單也會被禁用。
> 注意:如果菜單已存在并且這個菜單不屬于該插件就不會導入,如果已存在,屬于該插件則是更新菜單。
> 插件升級操作時,同樣會根據menu導入,如果存在則是更新該菜單,如有額外處理,可在upgrade方法中操作
```
<pre class="calibre16">```
<span class="token"><</span><span class="token">?</span>php
declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span>
namespace addons\demo<span class="token1">;</span>
use think\Addons<span class="token1">;</span>
class <span class="token6">Demo</span> extends <span class="token6">Addons</span>
<span class="token1">{</span>
<span class="token5">// 菜單</span>
public $menu <span class="token">=</span> <span class="token1">[</span>
<span class="token1">[</span>
<span class="token4">'title'</span><span class="token">=</span><span class="token">></span><span class="token4">'插件測試'</span><span class="token1">,</span>
<span class="token4">'name'</span><span class="token">=</span><span class="token">></span><span class="token4">'demo'</span><span class="token1">,</span>
<span class="token4">'child'</span><span class="token">=</span><span class="token">></span><span class="token1">[</span>
<span class="token1">[</span><span class="token4">'title'</span><span class="token">=</span><span class="token">></span><span class="token4">'查看'</span><span class="token1">,</span><span class="token4">'name'</span><span class="token">=</span><span class="token">></span><span class="token4">'demo/index'</span><span class="token1">]</span><span class="token1">,</span>
<span class="token1">[</span><span class="token4">'title'</span><span class="token">=</span><span class="token">></span><span class="token4">'添加'</span><span class="token1">,</span><span class="token4">'name'</span><span class="token">=</span><span class="token">></span><span class="token4">'demo/add'</span><span class="token1">]</span><span class="token1">,</span>
<span class="token1">[</span><span class="token4">'title'</span><span class="token">=</span><span class="token">></span><span class="token4">'修改'</span><span class="token1">,</span><span class="token4">'name'</span><span class="token">=</span><span class="token">></span><span class="token4">'demo/edit'</span><span class="token1">]</span><span class="token1">,</span>
<span class="token1">[</span><span class="token4">'title'</span><span class="token">=</span><span class="token">></span><span class="token4">'刪除'</span><span class="token1">,</span><span class="token4">'name'</span><span class="token">=</span><span class="token">></span><span class="token4">'demo/del'</span><span class="token1">]</span><span class="token1">,</span>
<span class="token1">]</span>
<span class="token1">]</span>
<span class="token1">]</span><span class="token1">;</span>
public <span class="token2">function</span> <span class="token6">install</span><span class="token1">(</span><span class="token1">)</span>
<span class="token1">{</span>
<span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span>
<span class="token1">}</span>
public <span class="token2">function</span> <span class="token6">uninstall</span><span class="token1">(</span><span class="token1">)</span>
<span class="token1">{</span>
<span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span>
<span class="token1">}</span>
<span class="token1">}</span>
```
```
## 菜單多語言
在插件目錄,在data目錄下創建zh-cn.php文件,如下圖

目前后臺內置的中英語言包、因此在上面講的$menu變量里面title全部寫成英文,然后下面的寫上英文跟中文的對照。
```
<pre class="calibre16">```
<span class="token"><</span><span class="token">?</span>php
<span class="token2">return</span> <span class="token1">[</span>
<span class="token4">'Addon test'</span> <span class="token">=</span><span class="token">></span> <span class="token4">'插件測試'</span>
<span class="token1">]</span><span class="token1">;</span>
```
```
支持其他語言包寫法,例如繁體中文命名為:zh-tw.php,那么代碼如下:
```
<pre class="calibre16">```
<span class="token"><</span><span class="token">?</span>php
<span class="token2">return</span> <span class="token1">[</span>
<span class="token4">'Addon test'</span> <span class="token">=</span><span class="token">></span> <span class="token4">'插件測試'</span>
<span class="token1">]</span><span class="token1">;</span>
```
```
創建文件后我們需要在插件初始化時加載語言包
```
<pre class="calibre16">```
public <span class="token2">function</span> <span class="token6">addonsInitHook</span><span class="token1">(</span><span class="token1">)</span>
<span class="token1">{</span>
<span class="token5">// 獲取語言包對象</span>
$lang <span class="token">=</span> <span class="token6">app</span><span class="token1">(</span><span class="token1">)</span><span class="token">-</span><span class="token">></span>lang<span class="token1">;</span>
<span class="token5">// 加載語言包,$this->addon_path 插件目錄,DIRECTORY_SEPARATOR 是 '/' 或 '\',$lang->getLangset() 是當前語言</span>
$lang<span class="token">-</span><span class="token">></span><span class="token6">load</span><span class="token1">(</span>$this<span class="token">-</span><span class="token">></span>addon_path<span class="token1">.</span><span class="token4">'data'</span><span class="token1">.</span>DIRECTORY_SEPARATOR<span class="token1">.</span>$lang<span class="token">-</span><span class="token">></span><span class="token6">getLangset</span><span class="token1">(</span><span class="token1">)</span><span class="token1">.</span><span class="token4">'.php'</span><span class="token1">)</span><span class="token1">;</span>
<span class="token1">}</span>
```
```
## 手動導入
如下,我們可以創建PHP文件,放到插件的data目錄下,如下

```
<pre class="calibre16">```
<span class="token"><</span><span class="token">?</span>php
<span class="token2">return</span> <span class="token1">[</span>
<span class="token1">[</span>
<span class="token5">// 父菜單ID或父菜單name或0</span>
<span class="token4">"parent_id"</span> <span class="token">=</span><span class="token">></span> <span class="token3">57</span><span class="token1">,</span>
<span class="token5">// 標題</span>
<span class="token4">"title"</span> <span class="token">=</span><span class="token">></span> <span class="token4">'菜單名稱'</span><span class="token1">,</span>
<span class="token5">// 權限認證規則</span>
<span class="token4">"name"</span><span class="token">=</span><span class="token">></span><span class="token4">"createhtml"</span><span class="token1">,</span>
<span class="token5">// 路由地址</span>
<span class="token4">"route"</span> <span class="token">=</span><span class="token">></span> <span class="token4">""</span><span class="token1">,</span>
<span class="token5">// fontawesome 圖標</span>
<span class="token4">"icon"</span> <span class="token">=</span><span class="token">></span> <span class="token4">'fas fa-print'</span><span class="token1">,</span>
<span class="token5">// 備注</span>
<span class="token4">"remark"</span> <span class="token">=</span><span class="token">></span> <span class="token4">""</span><span class="token1">,</span>
<span class="token5">// 排序</span>
<span class="token4">"weigh"</span> <span class="token">=</span><span class="token">></span> <span class="token3">10</span><span class="token1">,</span>
<span class="token5">// 菜單類型</span>
<span class="token4">"type"</span> <span class="token">=</span><span class="token">></span> <span class="token3">1</span><span class="token1">,</span>
<span class="token5">// 子級</span>
<span class="token4">"child"</span><span class="token">=</span><span class="token">></span><span class="token1">[</span>
<span class="token1">[</span>
<span class="token5">// 標題</span>
<span class="token4">"title"</span> <span class="token">=</span><span class="token">></span> <span class="token4">'菜單名稱1'</span><span class="token1">,</span>
<span class="token5">// 權限認證規則</span>
<span class="token4">"name"</span><span class="token">=</span><span class="token">></span><span class="token4">"createhtml/index1"</span><span class="token1">,</span>
<span class="token5">// 子級</span>
<span class="token4">"child"</span><span class="token">=</span><span class="token">></span><span class="token1">[</span>
<span class="token1">[</span><span class="token4">"title"</span> <span class="token">=</span><span class="token">></span> <span class="token4">'菜單名稱2'</span><span class="token1">,</span><span class="token4">"name"</span><span class="token">=</span><span class="token">></span><span class="token4">"createhtml/index"</span><span class="token1">,</span><span class="token1">]</span>
<span class="token1">]</span>
<span class="token1">]</span><span class="token1">,</span>
<span class="token1">[</span>
<span class="token5">// 標題</span>
<span class="token4">"title"</span> <span class="token">=</span><span class="token">></span> <span class="token4">'菜單名稱3'</span><span class="token1">,</span>
<span class="token5">// 權限認證規則</span>
<span class="token4">"name"</span><span class="token">=</span><span class="token">></span><span class="token4">"createhtml/index"</span><span class="token1">,</span>
<span class="token1">]</span>
<span class="token1">]</span>
<span class="token1">]</span><span class="token1">,</span>
<span class="token1">]</span><span class="token1">;</span>
```
```
在安裝的時候導入,使用`create_menu`方法導入。導入后無需管禁用、啟用與卸載的操作了,系統會自動去操作菜單。
```
<pre class="calibre16">```
public <span class="token2">function</span> <span class="token6">install</span><span class="token1">(</span><span class="token1">)</span>
<span class="token1">{</span>
<span class="token5">// 菜單數組文件路徑</span>
$menu <span class="token">=</span> include $this<span class="token">-</span><span class="token">></span>addon_path<span class="token1">.</span><span class="token4">'data'</span><span class="token1">.</span>DIRECTORY_SEPARATOR<span class="token1">.</span><span class="token4">'menu.php'</span><span class="token1">;</span>
<span class="token5">// 參數一給路徑,參數二給當前插件的標識</span>
<span class="token6">create_menu</span><span class="token1">(</span>$menu<span class="token1">,</span>$this<span class="token">-</span><span class="token">></span><span class="token6">getName</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span>
<span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span>
<span class="token1">}</span>
```
```
## 方法的使用
- create\_menu 創建菜單
參數1為菜單數組,參數2為菜單屬于的插件標識。
> 注意:如果菜單已存在并且這個菜單不屬于該插件就不會導入,如果已存在,屬于該插件則是更新菜單
```
<pre class="calibre16">```
<span class="token5">// 在插件里面可以直接獲取到插件標識,當然你也可以直接寫上你的插件標識</span>
<span class="token6">create_menu</span><span class="token1">(</span>$menu<span class="token1">,</span> $this<span class="token">-</span><span class="token">></span><span class="token6">getName</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span>
```
```
- status\_menu 更改狀態:啟用與禁用.
參數1為:1=啟用,0=禁用,參數2為插件名稱標識
```
<pre class="calibre16">```
<span class="token6">status_menu</span><span class="token1">(</span><span class="token3">1</span><span class="token1">,</span> $this<span class="token">-</span><span class="token">></span><span class="token6">getName</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span> <span class="token5">// 啟用菜單</span>
```
```
```
<pre class="calibre16">```
<span class="token5">// 例如插件叫demo</span>
<span class="token6">status_menu</span><span class="token1">(</span><span class="token3">0</span><span class="token1">,</span> <span class="token4">'demo'</span><span class="token1">)</span><span class="token1">;</span> <span class="token5">// 禁用demo的菜單</span>
```
```
- del\_menu 刪除菜單
```
<pre class="calibre20">```
<span class="token5">// 參數1為插件標識</span>
<span class="token6">del_menu</span><span class="token1">(</span>$name<span class="token1">)</span><span class="token1">;</span>
```
```
- 簡介
- 下載與安裝配置
- 下載
- 虛擬主機安裝
- 百度云虛擬主機
- 創業云虛擬主機
- Linux下寶塔安裝
- 寶塔一鍵部署
- Windows下寶塔安裝
- phpEnv下安裝
- phpStudy下安裝
- 偽靜態(url重寫)
- 安裝系統
- 調試模式與env文件
- 重新安裝與安裝文件說明
- 后臺使用幫助
- 后臺入口文件
- 首頁面板
- 配置中心
- 站點配置
- SEO設置
- SEO設置-靜態生成
- 文檔屬性
- 站點模塊
- V2.2.2版本 -
- V2.2.3版本 +
- 模型管理
- 欄目管理
- 字段類型與組件
- 前言
- 前端組件
- 驗證規則
- text 單行文本
- textarea 多行文本
- radio 單選
- checkbox 復選
- select 下拉列表
- selects下拉列表(多)
- selectpage 動態下拉
- editor編輯器
- image圖片
- images圖片(多)
- number數字
- date日期
- datetime日期和時間
- downfile文件上傳
- downfiles文件上傳(多)
- array 數組(鍵值對)
- 內容管理
- 自定義URL
- 多語言
- 界面多語言
- 內容多語言
- 多語言URL地址
- 附件管理
- 應用中心
- 標簽語法
- 標簽使用必讀
- 列表標簽
- content 內容列表標簽
- contentpage 內容列表分頁
- wfpage 瀑布流分頁
- filter 篩選標簽
- order 排序標簽
- 內容標簽
- guestbook 留言(表單)標簽(廢棄)
- form 表單標簽
- pre 上一篇標簽
- next 下一篇標簽
- prenext 上一篇下一篇(高級)標簽
- fileinfo 獲取附件信息(文件下載)
- 內容分頁
- raw 格式化編輯器文本(即將廢棄)
- 全局標簽
- seo 標簽
- channel 欄目標簽
- arcone 獲取單條文檔
- breadcrumb 面包屑導航標簽
- adv 站點模塊標簽
- date 日期格式化標簽
- substr字符(標題)截取標簽
- volist 循環標簽
- language 獲取語言列表標簽
- query 查詢數據庫內容
- include 導入模板文件標簽
- 原生PHP與php標簽
- map生成位置地圖
- thumb 生成縮略圖
- addons 插件檢測
- 標簽管理
- taglist標簽(獲取標簽列表)
- tagarclist根據標簽獲取文章內容列表
- 導入標簽
- 模板開發
- 1. 創建模板
- 2. 模板目錄結構
- 3. 模板描述文件(重要) info.ini
- 4. 變量輸出格式
- 4. 模板變量
- 5. 獲取站點配置
- 6. 模板界面多語言
- 7. 模板靜態目錄及調用靜態文件
- 8. 模板定義插件事件
- 9. 模板搜索頁
- 10. 模板配置JSON
- 11. 導入演示數據
- 12. 卸載刪除演示數據
- 13. 模板文件打包
- 14. 整站源碼打包
- 插件開發
- 1. 創建插件
- 2. 目錄結構
- 3. 插件名稱類
- 4. 插件信息(info.ini)
- 5. 插件事件
- 6. 配置文件
- 7. install 安裝目錄
- 8. 創建菜單
- 9. 插件控制器
- 10. 插件視圖
- 10-1 插件主題化
- 11. 插件模型
- 12. 模型事件
- 13. 插件內置函數
- 13-1 插件函數庫
- 14. 插件多語言
- 15. 插件中間件
- 16. 插件路由
- 17. 插件驗證器
- 18. 標簽庫
- 19. 第三方類庫
- 20. 數據庫文件導入
- 插件打包
- 后臺前端使用幫助
- 二次開發幫助(更新中)
- 后臺前端開發幫助
- 路由(鏈接地址、訪問規則)
- URL訪問
- 路由定義
- URL生成
- 附錄
- 數據字典
- 助手函數庫