菜单数据以数组形式定义,定义好之后可以通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 | 子级菜单,有子级的话按一级菜单字段填写即可 | - | - |
name,权限规则
写法:控制器/方法,二级文件夹则是文件夹名/控制器/方法,注意二级需要填写路由route,路由地址
写法:文件夹名.控制器/方法,常用于有文件夹的情况,注意是“点”icon,图标
基于fontawesome
,一级菜单默认为fas fa-align-justify
,二级菜单默认far fa-circle
图标地址:https://fa5.dashgame.com/#/图标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);
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。