dshgdhdfcas30210 2018-02-09 21:07
浏览 99
已采纳

数据库中的菜单包含无限的子菜单/项目?

I'm trying to build this function that display a menu with sub menus from a database. Something that can show like sub-sub-sub-menus and so on... If that's ever something I need.

enter image description here

In the database i have 2 tables, menu and menuItem.

menu

enter image description here

menuItem

enter image description here

php file

function get_menu($id) {

require(dirname(__FILE__) . '/config.php');

// main base
$menu = "   SELECT id, menu_name, menu_data, menu_order
            FROM mos_menuItem 
            WHERE menu_parent_id='$id' 
            AND menu_sub='0' 
            ORDER BY menu_order";
$menuResult = mysqli_query($conn, $menu);

echo '<ul>';

while ($menuRow = mysqli_fetch_row($menuResult)) {
    // main menu
    echo '<li><a href="'. $menuRow[2] .'" class="menu-item parent-menu">'. $menuRow[1] .'</a></li>';

        // sub base
        $sub = "SELECT id, menu_name, menu_data, menu_order, menu_sub 
                    FROM mos_menuItem 
                    WHERE menu_parent_id='$menuRow[0]' 
                    AND menu_sub>='1' 
                    ORDER BY menu_order";
        $subResult = mysqli_query($conn, $sub);

        echo '<ul>';

        while ($subRow = mysqli_fetch_row($subResult)) {
            echo '<li><a href="'. $subRow[2] .'" class="menu-item sub-menu">'. $subRow[1] .'</a></li>';
        }   

        echo '</ul>';
}
echo '</ul>';

mysqli_close($conn);
}

so I need to loop something inside itself? I'm not sure where to go from here.

  • 写回答

2条回答 默认 最新

  • duanji9264 2018-02-11 21:34
    关注

    So after some trial and error i figure it out. It really helped to look at Sheikh Azad code. The only difference is in my function i have AND menu_sub='$sub' to make it not going loop the main menu item if the id is the same.. If that make sense.

    The function

    function mos_get_menu_editor($menuId, $sub) {
    
        require(dirname(__FILE__) . '/config.php');
    
        $item = "   SELECT id, menu_name, menu_data, menu_order, menu_sub
                    FROM mos_menuItem 
                    WHERE menu_parent_id='$menuId' 
                    AND menu_sub='$sub' 
                    ORDER BY menu_order";
        $itemResult = mysqli_query($conn, $item);
    
            echo '<ul>';
    
            while ($itemRow = mysqli_fetch_row($itemResult)) {
    
                echo '<li><a href="'. $itemRow[2] .'" class="menu-item ' .($sub ? 'sub-menu' : '').'">'. $itemRow[1] .'</a></li>';
    
                    mos_get_menu_editor($itemRow[0], 1);
    
            }
            echo '</ul>';
    
        mysqli_close($conn);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站