【问题标题】:print navigation with sub menu打印带有子菜单的导航
【发布时间】:2017-10-08 08:50:12
【问题描述】:

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

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

HTML 来自引导程序:

<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>

提前谢谢你。

【问题讨论】:

  • 嗯,对我来说最复杂的部分是父部分。我可以毫无问题地打印所有元素。但是,我不知道如何创建一个函数来检查特定父元素是否有子元素(然后打印为下拉菜单),如果不打印为简单的 li 元素。

标签: php sql recursion foreach


【解决方案1】:

这很容易。你必须自己打电话给function menu。在你必须检查是否有子菜单之后,你将创建带有dropdown 类的ul 元素。

//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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2021-09-26
    • 2019-10-30
    相关资源
    最近更新 更多