创建菜单
优质
小牛编辑
192浏览
2023-12-01
后台菜单创建
一般我们的插件都会有后台管理的菜单,此时我们需要创建插件的后台管理菜单。以下是常用的方法。以下是Mydemo.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
{
/**
* 插件安装方法
* @return bool
*/
public function install()
{
$menu = [
[
'name' => 'mydemo',
'title' => 'Mydemo管理',
'icon' => 'fa fa-map-marker',
'sublist' => [
["name" => "signin/index","title" => "查看"],
["name" => "signin/add","title" => "添加"],
["name" => "signin/edit","title" => "编辑"],
["name" => "signin/del","title" => "删除"],
["name" => "signin/multi","title" => "批量更新"],
]
]
];
Menu::create($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 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
是我们父菜单,父菜单可以是id
,亦可以是菜单的name
。默认为0表示顶级菜单。
后台多级菜单
如果我们需要创建多级菜单,我们的$menu
值应该是这样
$menu = [
[
'name' => 'mydemo',
'title' => 'Mydemo管理',
'icon' => 'fa fa-magic',
'sublist' => [
[
'name' => 'mydemo/menu1',
'title' => '菜单示例1',
'icon' => 'fa fa-table',
'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',
'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',
'sublist' => [
['name' => 'mydemo/menu2/index', 'title' => '查看'],
]
],
]
]
];
其中sublist
表示下级菜单的配置,FastAdmin无限级菜单配置,但建议菜单级数不宜过多,合理的栏目规划能更方便后台的使用。
后台菜单操作
我们在后台禁用、启用、卸载插件是需要对菜单进行操作的。因此我们需要在Mydemo.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;
}
会员中心菜单
如果我们开发的插件有前台会员中心菜单,我们可以通过在Mydemo.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
常见问题
- 开发阶段由于创建了错误的后台菜单,导致安装插件时索引错误,此时可以到
权限管理
->规则菜单
中去删除错误的菜单规则。 - 插件卸载重装后。管理组权限菜单需要重新分配,否则对应的管理员会没有相关权限。