如何通过PHP和mysql构建无限级别的菜单 [英] How to build unlimited level of menu through PHP and mysql

查看:19
本文介绍了如何通过PHP和mysql构建无限级别的菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,为了构建我的菜单我的菜单我使用了类似这样的数据库结构

<前>2 服务 03 照片库 04 家 05 反馈 06 常见问题 07 新闻与活动 08 感言 0第81话 083 组织结构 8184 宪法 8185 理事会 81第86话 8187 服务 8188 出版物 81

要为现有子菜单分配另一个子菜单,我只需将其父级的 id 分配为其父字段的值.parent 0 表示顶部菜单

现在在另一个子菜单中创建子菜单没有问题

现在这是我获取顶部菜单的子菜单的方式

    <?$list = $obj ->子菜单($parentid);//此列表包含$parendid下的子菜单数组foreach($list 作为 $menu) {提取($菜单);echo '<li><a href="#">'.$name.'</a></li>';}?>

我想做的是.

我想检查一个新菜单是否有其他子菜单

我想继续检查,直到它搜索到每个可用的子菜单

我想像这样在它的特定列表项中显示它的子菜单

    <li><a href="#">首页</a><ul class="子菜单">........ <!-- 它的子菜单-->

解决方案

您需要为此使用递归函数.从技术上讲,有几种方法可以做到,但递归确实是这里的最佳选择.

以下是其工作原理的基本要点:

function drawMenu ($listOfItems) {echo "
    ";foreach ($listOfItems 作为 $item) {echo "
  • ".$item->name;如果 ($item->hasChildren()) {drawMenu($item->getChildren());//这里是递归}echo "</li>";}echo "</ul>";}

$item 的属性和方法只是示例,我会根据需要由您来实现这些,但我认为它可以传达信息.

Well, to build my menu my menu I use a db similar structure like this

  2  Services                  0
  3  Photo Gallery             0
  4  Home                      0
  5  Feedback                  0
  6  FAQs                      0
  7  News & Events             0
  8  Testimonials              0
 81  FACN                      0
 83  Organisation Structure   81
 84  Constitution             81
 85  Council                  81
 86  IFAWPCA                  81
 87  Services                 81
 88  Publications             81

To assign another submenu for existing submenu I simply assign its parent's id as its value of parent field. parent 0 means top menu

now there is not problem while creating submenu inside another submenu

now this is way I fetch the submenu for the top menu

<ul class="topmenu">
    <? $list = $obj -> childmenu($parentid); 
        //this list contains the array of submenu under $parendid
        foreach($list as $menu) {
            extract($menu);
            echo '<li><a href="#">'.$name.'</a></li>';
        }
    ?>
</ul>

What I want to do is.

I want to check if a new menu has other child menu

and I want to keep on checking until it searches every child menu that is available

and I want to display its child menu inside its particular list item like this

<ul>       
       <li><a href="#">Home</a>
        <ul class="submenu">
           ........ <!-- Its sub menu -->
           </ul>
       </li>
</ul>

解决方案

You need to use recursive functions for this. Technically, there's a few ways to do it, but recursion is really the best option here.

Here's the basic gist of how it would work:

function drawMenu ($listOfItems) {
    echo "<ul>";
    foreach ($listOfItems as $item) {
        echo "<li>" . $item->name;
        if ($item->hasChildren()) {
            drawMenu($item->getChildren()); // here is the recursion
        }
        echo "</li>";
    }
    echo "</ul>";
}

The properties and methods of $item are just examples, and I'll leave it up to you to implement these however you need to, but I think it gets the message across.

这篇关于如何通过PHP和mysql构建无限级别的菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆