Hkcms 创建后台菜单

菜单数据以数组形式定义,定义好之后可以通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/#/图标

  4. type,菜单类型
    未填写type时系统会自动判断菜单类型,在认为有子级情况下认为是菜单。若有特殊情况,您需要填写type字段

自动导入示例

在插件名称类里面增加公共属性$menu,在安装时检测到有这个属性就会自动导入,另外在卸载启用禁用更新等操作时系统会自动对菜单进行相应的操作,例如插件禁用,菜单也会被禁用。

注意:如果菜单已存在并且这个菜单不属于该插件就不会导入,如果已存在,属于该插件则是更新菜单。
插件升级操作时,同样会根据menu导入,如果存在则是更新该菜单,如有额外处理,可在upgrade方法中操作

<?php
declare (strict_types=1);namespace addons\demo;use think\Addons;class Demo extends Addons{
    // 菜单
    public $menu = [
        [
            'title'=>'插件测试',
            'name'=>'demo',
            'child'=>[
                ['title'=>'查看','name'=>'demo/index'],
                ['title'=>'添加','name'=>'demo/add'],
                ['title'=>'修改','name'=>'demo/edit'],
                ['title'=>'删除','name'=>'demo/del'],
            ]
        ]
    ];

    public function install()
    {
        return true;
    }

    public function uninstall()
    {
        return true;
    }}

菜单多语言

在插件目录,在data目录下创建zh-cn.php文件,如下图

目前后台内置的中英语言包、因此在上面讲的$menu变量里面title全部写成英文,然后下面的写上英文跟中文的对照。

<?phpreturn [
    'Addon test' => '插件測試'];

支持其他语言包写法,例如繁体中文命名为:zh-tw.php,那么代码如下:

<?phpreturn [
    'Addon test' => '插件測試'];

创建文件后我们需要在插件初始化时加载语言包

public function addonsInitHook(){
    // 获取语言包对象
    $lang = app()->lang;
    // 加载语言包,$this->addon_path 插件目录,DIRECTORY_SEPARATOR 是 '/' 或 '\',$lang->getLangset() 是当前语言
    $lang->load($this->addon_path.'data'.DIRECTORY_SEPARATOR.$lang->getLangset().'.php');}

手动导入

如下,我们可以创建PHP文件,放到插件的data目录下,如下

<?phpreturn [
    [
        // 父菜单ID或父菜单name或0
        "parent_id" => 57,
        // 标题
        "title" => '菜单名称',
        // 权限认证规则
        "name"=>"createhtml",
        // 路由地址
        "route" => "",
        // fontawesome 图标
        "icon" => 'fas fa-print',
        // 备注
        "remark" => "",
        // 排序
        "weigh" => 10,
        // 菜单类型
        "type" => 1,
        // 子级
        "child"=>[
            [
                // 标题
                "title" => '菜单名称1',
                // 权限认证规则
                "name"=>"createhtml/index1",
                // 子级
                "child"=>[
                    ["title" => '菜单名称2',"name"=>"createhtml/index",]
                ]
            ],
            [
                // 标题
                "title" => '菜单名称3',
                // 权限认证规则
                "name"=>"createhtml/index",
            ]
        ]
    ],];

在安装的时候导入,使用create_menu方法导入。导入后无需管禁用、启用与卸载的操作了,系统会自动去操作菜单。

public function install(){
    // 菜单数组文件路径
    $menu = include $this->addon_path.'data'.DIRECTORY_SEPARATOR.'menu.php';
    // 参数一给路径,参数二给当前插件的标识
    create_menu($menu,$this->getName());
    return true;}

方法的使用

  • create_menu 创建菜单
    参数1为菜单数组,参数2为菜单属于的插件标识。

注意:如果菜单已存在并且这个菜单不属于该插件就不会导入,如果已存在,属于该插件则是更新菜单

// 在插件里面可以直接获取到插件标识,当然你也可以直接写上你的插件标识create_menu($menu, $this->getName());
  • status_menu 更改状态:启用与禁用.
    参数1为:1=启用,0=禁用,参数2为插件名称标识

status_menu(1, $this->getName()); // 启用菜单
// 例如插件叫demostatus_menu(0, 'demo'); // 禁用demo的菜单
  • del_menu 删除菜单

// 参数1为插件标识del_menu($name);



本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com