## 创建菜单
## 后台菜单创建
一般我们的应用插件都会有后台管理的菜单,此时我们需要创建插件的后台管理菜单。以下是常用的方法。以下是`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. 插件卸载重装后,管理组权限菜单需要重新分配,否则对应的管理员会没有相关权限。