dongzi9196 2014-01-29 19:42
浏览 101
已采纳

动态嵌套菜单具有错误放置的<ul>标签,<li>不包围子菜单项

I'm trying to create a dynamic nested menu and am running into some issues that I don't know how to handle. After each top menu item I am getting a empty UL tag set. Also when there is a drop down menu the LI tag set is not properly wrapping the UL tags.

here is the code I am trying to modify....thanks!

$sql = "SELECT menuID, menuTitle, menuURL, menuParentID, menuOrderID FROM menu ORDER BY menuParentID, menuOrderID ASC";
$items = mysql_query($sql);
while ($obj = mysql_fetch_object($items)) {
    if ($obj->menuParentID == 0) {
        $parent_menu[$obj->menuID]['menuTitle'] = $obj->menuTitle;
        $parent_menu[$obj->menuID]['link'] = $obj->menuURL;
    } else {
        $sub_menu[$obj->menuID]['parent'] = $obj->menuParentID;
        $sub_menu[$obj->menuID]['menuTitle'] = $obj->menuTitle;
        $sub_menu[$obj->menuID]['link'] = $obj->menuURL;
        if (!isset($parent_menu[$obj->menuParentID]['count'])) {
            $parent_menu[$obj->menuParentID]['count'] = 0;
        }
        $parent_menu[$obj->menuParentID]['count']++;
    }
}
mysql_free_result($items);



function dyn_menu_folded($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "dropdown-menu", $dd_style = "dropdown") {
    $menu = "<ul class=\"".$main_id."\">
";
    foreach ($parent_array as $pkey => $pval) {
        if (!empty($pval['count'])) {
            $menu .= "  <li class=\"".$dd_style."\"><a href=\"".$pval['link']./*"?".$qs_val."=".$pkey.*/"\">".$pval['menuTitle']."<b class=\"caret\"></b></a></li>
";
        } else {
            $menu .= "  <li><a href=\"".$pval['link']."\">".$pval['menuTitle']."</a></li>
";
        }
        //if (!empty($_REQUEST[$qs_val])) {
        $menu .= "<ul class=\"".$sub_id."\">
";
        foreach ($sub_array as $sval) {
            if ($pkey == $sval['parent']) { //
                $menu .= "<li><a href=\"".$sval['link']."\">".$sval['menuTitle']."</a></li>
";
            }
        }
        $menu .= "</ul>
";
        //}
    }
    $menu .= "</ul>
";
    return $menu;
}

?>
<?php
echo dyn_menu_folded($parent_menu, $sub_menu, "menu", "nav", "dropdown-menu");
?>




//this is a sample of the result.

<ul class="nav">
    <li ><a href="#">ITEM A</a></li>
<ul class="dropdown-menu"></ul>  //IMPROPER UL TAGS
    <li ><a href="#">ITEM B</a></li>
<ul class="dropdown-menu"></ul>
    <li ><a href="#">ITEM C</a></li>
<ul class="dropdown-menu"></ul>
    <li ><a href="#">ITEM D</a></li>
<ul class="dropdown-menu"></ul>
    <li class="dropdown"><a href="#">ITEM E<b class="caret"></b></a>
    </li> //LI TAG NOT WRAPPING AROUND UL TAG
        <ul class="dropdown-menu">
            <li ><a href="#">ITEM E1</a></li>
            <li ><a href="#">ITEM E2</a></li>
            <li ><a href="#">ITEM E3</a></li>
            <li ><a href="#">ITEM E4</a></li>
            <li ><a href="#">ITEM E5</a></li>
        </ul>
    <li class="dropdown"><a href="#">ITEM F<b class="caret"></b></a>
    </li>
        <ul class="dropdown-menu">
            <li ><a href="#">ITEM F1</a></li>
            <li ><a href="#">ITEM F2</a></li>
            <li ><a href="#">ITEM F3</a></li>
            <li ><a href="#">ITEM F4</a></li>
            <li ><a href="#">ITEM F5</a></li>
            <li ><a href="#">ITEM F6</a></li>
        </ul>
    <li ><a href="#">ITEM G</a></li>
<ul class="dropdown-menu"></ul>
    <li ><a href="#">ITEM H</a></li>
<ul class="dropdown-menu"></ul>
    <li ><a href="#">ITEM I</a></li>
<ul class="dropdown-menu"></ul>
    <li ><a href="#">ITEM J</a></li>
<ul class="dropdown-menu"></ul>
</ul>


//This is how it should look.

<ul class="nav">
    <li ><a href="#">ITEM A</a></li>
    <li ><a href="#">ITEM B</a></li>
    <li ><a href="#">ITEM C</a></li>
    <li ><a href="#">ITEM D</a></li>
    <li class="dropdown"><a href="#">ITEM E<b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li ><a href="#">ITEM E1</a></li>
            <li ><a href="#">ITEM E2</a></li>
            <li ><a href="#">ITEM E3</a></li>
            <li ><a href="#">ITEM E4</a></li>
            <li ><a href="#">ITEM E5</a></li>
        </ul>
    </li>
    <li class="dropdown"><a href="#">ITEM F<b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li ><a href="#">ITEM F1</a></li>
            <li ><a href="#">ITEM F2</a></li>
            <li ><a href="#">ITEM F3</a></li>
            <li ><a href="#">ITEM F4</a></li>
            <li ><a href="#">ITEM F5</a></li>
            <li ><a href="#">ITEM F6</a></li>
        </ul>
    </li>
    <li ><a href="#">ITEM G</a></li>
    <li ><a href="#">ITEM H</a></li>
    <li ><a href="#">ITEM I</a></li>
    <li ><a href="#">ITEM J</a></li>
</ul>
  • 写回答

1条回答 默认 最新

  • duanfei1987 2014-01-30 01:50
    关注

    Without knowing for sure how $parent_menu and $sub_menu is structured, I can't say for sure if this will do the job, but give it a go anyway.

    function create_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "dropdown-menu", $dd_style = "dropdown")
    {
        $menu = "<ul class=\"{$main_id}\">
    ";
    
        foreach ($parent_array as $pkey => $pval) {
            if ( ! empty($pval['count'])) {
                $menu .= "\t<li class=\"{$dd_style}\"><a href=\"{$pval['link']}\">{$pval['menuTitle']}<b class=\"caret\"></b></a>
    ";
                $menu .= "\t\t<ul class=\"{$sub_id}\">
    ";
    
                foreach ($sub_array as $sval) {
                    if ($pkey == $sval['parent']) {
                        $menu .= "\t\t\t<li><a href=\"{$sval['link']}\">{$sval['menuTitle']}</a></li>
    ";
                    }
                }
    
                $menu .= "</ul></li>
    ";
            } else {
                $menu .= "\t<li><a href=\"{$pval['link']}\">{$pval['menuTitle']}</a></li>
    ";
            }
        }
    
        return $menu . "</ul>
    ";
    }
    

    If your still having issues, please post the var_dump() output of $parent_menu and $sub_menu.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害