## 創建菜單
## 后臺菜單創建
一般我們的應用插件都會有后臺管理的菜單,此時我們需要創建插件的后臺管理菜單。以下是常用的方法。以下是`addons/mydemo/Mydemo.php`中的代碼如下:
~~~php
<?php
namespace addons\mydemo;
use app\common\library\Menu;
use app\common\model\User;
use fast\Date;
use think\Addons;
use think\Config;
use think\Request;
use think\Route;
/**
* Mydemo插件
*/
class Mydemo extends Addons
{
protected $menu = [
[
'name' => 'mydemo', //權限規則標識,首個菜單標識必須和插件標識相同
'title' => 'Mydemo管理', //菜單標題
'icon' => 'fa fa-map-marker', //菜單按鈕,可使用Font-Awesome的圖標
'ismenu' => 1, //是否為菜單
'weigh' => 1, //權重,值越大越靠前
'remark' => 'Demo管理描述內容', //菜單描述內容,在列表處顯示
'sublist' => [ //子菜單配置
["name" => "signin/index","title" => "查看"],
["name" => "signin/add","title" => "添加"],
["name" => "signin/edit","title" => "編輯"],
["name" => "signin/del","title" => "刪除"],
["name" => "signin/multi","title" => "批量更新"],
]
]
];
/**
* 插件安裝方法
* @return bool
*/
public function install()
{
Menu::create($this->menu);
return true;
}
/**
* 插件卸載方法
* @return bool
*/
public function uninstall()
{
Menu::delete("mydemo");
return true;
}
/**
* 插件啟用方法
* @return bool
*/
public function enable()
{
Menu::enable("mydemo");
return true;
}
/**
* 插件禁用方法
* @return bool
*/
public function disable()
{
Menu::disable("mydemo");
return true;
}
/**
* 插件升級方法
* @return bool
*/
public function upgrade()
{
//如果菜單有變更則升級菜單
Menu::upgrade('mydemo', $this->menu);
return true;
}
/**
* 會員中心邊欄后
* @return mixed
* @throws \Exception
*/
public function userSidenavAfter()
{
$request = Request::instance();
$controllername = strtolower($request->controller());
$actionname = strtolower($request->action());
$data = [
'actionname' => $actionname,
'controllername' => $controllername
];
return $this->fetch('view/hook/user_sidenav_after', $data);
}
}
~~~
其中我們可以在`install`方法中使用`Menu::create($menu, $parent)`來創建菜單,其中`$menu`是我們的菜單配置信息,`$parent`是我們父菜單,父菜單是父菜單的`name`。默認為`0`表示頂級菜單。
## 后臺多級菜單
如果我們需要創建多級菜單,我們的`$menu`值應該是這樣
~~~bash
$menu = [
[
'name' => 'mydemo',
'title' => 'Mydemo管理',
'icon' => 'fa fa-magic',
'ismenu' => 1,
'weigh' => 1,
'remark' => 'Demo管理描述內容'
'sublist' => [
[
'name' => 'mydemo/menu1',
'title' => '菜單示例1',
'icon' => 'fa fa-table',
'ismenu' => 1,
'weigh' => 3,
'sublist' => [
['name' => 'mydemo/menu1/index', 'title' => '查看'],
['name' => 'mydemo/menu1/detail', 'title' => '詳情'],
['name' => 'mydemo/menu1/change', 'title' => '變更'],
['name' => 'mydemo/menu1/del', 'title' => '刪除'],
['name' => 'mydemo/menu1/multi', 'title' => '批量更新'],
]
],
[
'name' => 'mydemo/menu2',
'title' => '菜單示例2',
'icon' => 'fa fa-table',
'ismenu' => 1,
'weigh' => 2,
'sublist' => [
['name' => 'mydemo/menu2/index', 'title' => '查看'],
['name' => 'mydemo/menu2/del', 'title' => '刪除'],
['name' => 'mydemo/menu2/multi', 'title' => '批量更新'],
]
],
[
'name' => 'mydemo/menu3',
'title' => '菜單示例3',
'icon' => 'fa fa-edit',
'ismenu' => 1,
'weigh' => 1,
'sublist' => [
['name' => 'mydemo/menu2/index', 'title' => '查看'],
]
],
]
]
];
~~~
其中`sublist`表示下級菜單的配置,FastAdmin無限級菜單配置,但建議菜單級數不宜過多,合理的欄目規劃能更方便后臺的使用。
## 后臺菜單操作
我們在后臺禁用、啟用、卸載插件是需要對菜單進行操作的。因此我們需要在`Mydemo.php`對應的方法中添加上相應的操作。如
~~~php
/**
* 插件卸載方法
* @return bool
*/
public function uninstall()
{
Menu::delete("mydemo");
return true;
}
/**
* 插件啟用方法
* @return bool
*/
public function enable()
{
Menu::enable("mydemo");
return true;
}
/**
* 插件禁用方法
* @return bool
*/
public function disable()
{
Menu::disable("mydemo");
return true;
}
~~~
## 后臺菜單升級
請檢查是否存在`upgrade`方法,如
~~~php
/**
* 插件升級方法
* @return bool
*/
public function upgrade()
{
//如果菜單有變更則升級菜單
Menu::upgrade('mydemo', $this->menu);
return true;
}
~~~
調用`Menu::upgrage('插件標識', 菜單數組);`會自動進行菜單的升級
## 會員中心菜單
如果我們開發的插件有前臺會員中心菜單,我們可以通過在`Mydemo.php`中添加
~~~php
/**
* 會員中心邊欄后
* @return mixed
* @throws \Exception
*/
public function userSidenavAfter()
{
$request = Request::instance();
$controllername = strtolower($request->controller());
$actionname = strtolower($request->action());
$data = [
'actionname' => $actionname,
'controllername' => $controllername
];
return $this->fetch('view/hook/user_sidenav_after', $data);
}
~~~
用此行為事件返回一個HTML即可將菜單顯示在會員中心的邊欄。
注意`view/hook/user_sidenav_after`文件位于`addons/mydemo/view/hook/user_sidenav_after.html`
## 常見問題
1. 開發階段由于創建了錯誤的后臺菜單,導致安裝插件時索引錯誤,此時可以到`權限管理`\->`規則菜單`中去刪除錯誤的菜單規則。
2. 插件卸載重裝后,管理組權限菜單需要重新分配,否則對應的管理員會沒有相關權限。