多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 创建菜单 ## 后台菜单创建 一般我们的应用插件都会有后台管理的菜单,此时我们需要创建插件的后台管理菜单。以下是常用的方法。以下是`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. 插件卸载重装后,管理组权限菜单需要重新分配,否则对应的管理员会没有相关权限。