首页 > 解决方案 > 在同一函数中从数组递归构建页面菜单

问题描述

我正在为我的网站构建一个新菜单,以利用 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

标签: phparraysfunc

解决方案


推荐阅读