php 有一表menu递归,PHP+Element UI递归实现无限极树形菜单

使用后台都会涉及到左侧的菜单分类;

刚好今天再使用Yaf + element 做一个通用后台,实现了一下无限极菜单;

下面具体讲一下实现方法:

分为几个步骤:获取所有菜单

递归分级

递归渲染菜单

首先我们来看一下element的菜单html结构

default-active="2"

class="el-menu-vertical-demo"

@open="handleOpen"

@close="handleClose">

导航一

分组一

选项1

选项2

选项3

选项4

选项1

导航二

导航三

导航四

效果为:

4febb35dcf032e69e9fb965f4db10da5.png

数据表结构如下:

ee06ff02ccaade1d337c0ee9c38c18fc.png

读取后台所有菜单数据://根据各自框架更改,获取所有的菜单数据

$data = \Libs\Db\Pdo::getInstance()->fetchAll("SELECT * FROM `yaf_route`");

递归分组public function treeRoute(array $data,int $pid,int $deep=0) : array

{

$tree=[];

foreach ($data as $row) {

if($row['pid'] == $pid){

$row['deep'] = $deep;

$row['children'] = $this->treeRoute($data,$row['id'],$deep+1);

$tree[] = $row;

}

}

return $tree;

}

返回数据结构如下:[

{

"id": "1",

"name": "系统设置",

"pid": "0",

"icon": "el-icon-setting",

"sorts": "0",

"route": "",

"create_time": "2019-12-25 16:11:40",

"deep": 0,

"children": [

{

"id": "2",

"name": "站点配置",

"pid": "1",

"icon": "",

"sorts": "0",

"route": "/config/index",

"create_time": "2019-12-25 17:41:11",

"deep": 1,

"children": [

{

"id": "5",

"name": "支付配置",

"pid": "2",

"icon": "",

"sorts": "0",

"route": "/pay/index",

"create_time": "2019-12-26 11:04:55",

"deep": 2,

"children": []

}

]

},

{

"id": "4",

"name": "菜单设置",

"pid": "1",

"icon": "",

"sorts": "0",

"route": "/route/index",

"create_time": "2019-12-25 18:06:17",

"deep": 1,

"children": []

}

]

}

]

根据前面Element菜单html递归菜单private function treeAsideData(array $data)

{

$html = '';

if(is_array($data)) {

foreach ($data as $row) {

if (empty($row['children'])) {

$html .= ''.$row['name'].'';

} else {

$html .= ' '.$row['name'].'';

$html .= $this->treeAsideData($row['children']);

$html .= '' ;

}

}

}

return $html;

}

调用如下://根据各自框架更改,方法不变

$data = \Libs\Db\Pdo::getInstance()->fetchAll("SELECT * FROM `yaf_route`");

$menus = RouteModel::getInstance()->treeRoute($data,0,0);

$aside = $this->treeAsideData($menus);

结果如下:

f1e4876ed5f0422587c8dd3b10736a6e.png

源代码请查看代码分享-> yafelement:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值