php - 在同一函数中从数组递归构建页面菜单
问题描述
我正在为我的网站构建一个新菜单,以利用 seo 友好的 url 而不是页面 id,但是我遇到了动态构建菜单的问题。
以前我们的菜单是使用递归 MySQL 函数制作的,该函数将获取所有内容并递归构建菜单,在需要的地方添加 html 并输出结果,但是这次我想让 PHP 和数组生成菜单。
基本上我从数据库中提取所有页面并将它们插入到一个由 $this->ApplicationPages 调用的数组中,但是使用下面的函数我遇到了 2 个问题。
问题 1
我只能深入 2 个级别,因为我需要能够深入到数据库中的内容。
例如,使用下面的函数我只能得到“父母>孩子”,而我需要能够去“父母>孩子>孩子>孩子”。
问题 2
使用旧的 mysql 功能,我曾经能够计算有多少孩子,如果有孩子,它会用下拉菜单构建菜单,如果没有,它会将菜单构建为一个简单的链接。
这可能与数组吗?如果是这样,我该如何实现?
有问题的功能。
function BuildMenu(){
function ChildMenu($Pages,$parent){
$tree=null;
$tree .= "<ul class='dropdown-menu'>";
for($i = 0; $i < count($Pages); $i++) {
if($Pages[$i]['page_parent'] == $parent){
$tree .= "<li><a href='" . $Pages[$i]['page_slug'] . "' title=''>" . $Pages[$i]['page_title'] . "</a></li>";
}
}
$tree .= "</ul>";
return $tree;
}
function ParentMenu($Pages){
$tree=null;
for($i = 0; $i < count($Pages); $i++) {
if($Pages[$i]['page_parent'] == 0 AND $Pages[$i]['page_disablemenu'] <> 'yes'){
$tree .= "<li class='dropdown'>";
$tree .= "<a data-toggle='dropdown' href='" . $Pages[$i]['page_slug'] . "' title=''>" . $Pages[$i]['page_title'] . "<span class='caret'></span></a>";
$tree .= ChildMenu($Pages,$Pages[$i]['page_idno']);
$tree .= "</li>";
}
}
return $tree;
}
return ParentMenu($this->ApplicationPages);
}
该表目前如下所示
page_idno | page_slug | 页标题 | page_parent
1 | test | Test | 0
2 | test2 | Test 2 | 1
解决方案
推荐阅读
- swift - 圆角tableview标题swift
- javascript - Vuex 数据获取:如何在不同的组件中等待数据
- javascript - 在对象数组内连接对象数组
- c++ - 使用 lock_guard 同时从多个线程访问同一对象时出现问题
- api-gateway - 如何从 azure 应用程序网关重写 url 中删除 url 的截断部分
- javascript - 在 woocommerce_product_query 之后,Woocommerce 在商店中隐藏空过滤器
- ios - 使用 Swift 包管理器时如何访问包
- sql - 创建查询以获取总和
- postgresql - 在 PostgreSQL 中:致命:无法访问文件“anon”,没有这样的文件或目录错误
- python - 为什么第 100 个序列后第 n 项的斐波那契数列需要更多时间在 Python 中执行?