使用子菜单打印导航

时间:2017-05-09 21:19:21

标签: php sql recursion foreach

所以我想做的是用子菜单打印导航。我有什么:

菜单项的SQL表(ID,CAPTION,MODULE,PARENT_ID)。 所以父菜单项显然PARENT_ID为0.当添加子项时,PARENT_ID匹配父项的ID。如何用foreach或者递归函数打印这样的导航。

HTML来自bootstrap:

<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">WebSiteName</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="#">Home</a></li>
      <li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown" href="#">Page 1
        <span class="caret"></span></a>
        <ul class="dropdown-menu">
          <li><a href="#">Page 1-1</a></li>
          <li><a href="#">Page 1-2</a></li>
          <li><a href="#">Page 1-3</a></li>
        </ul>
      </li>
      <li><a href="#">Page 2</a></li>
      <li><a href="#">Page 3</a></li>
    </ul>
  </div>
</nav>

提前谢谢。

1 个答案:

答案 0 :(得分:2)

很容易。你必须自己打电话给function menu。在您必须检查子菜单是否包含后,您将使用ul类创建dropdown元素。

//call function
echo menu(0);

function menu($id){

    $return = "";

    // Your SQL query
    $data = "SELECT * FROM data WHERE 1=1 AND `parent_id`='" . $id . "'";

    foreach($data   as $key =>  $row){

        // calling menu to check is there any parent elements.

        $subs   = menu($row->id);

        if($subs!=''){
           $liClass = 'class="dropdow"';
           $aHrefAttr = 'class="dropdown-toggle" data-toggle="dropdown"';
        }else{
           $liClass = '';
           $aHrefAttr = '';
        }

        $return .= '<li '.$liClass.'><a ' . $aHrefAttr . ' href="'.$url.'">'.$row->title.'</a>';

        if($subs!=''){
            $return .= "<ul class='dropdown-menu'>\n";
            $return .=  $subs;
            $return .= "</ul>\n";
        }
        $return .= "</li>\n";
    }

    return $return;
}