简体   繁体   English

从数据库下拉菜单

[英]drop down menu from database

I am want to make a navigation menu with a sub menu on hover. 我想在悬停上创建一个带有子菜单的导航菜单。 I want to get this data from my database (to make it dynamic if data in database changes menu bar changes). 我想从数据库中获取此数据(如果数据库更改菜单栏中的数据更改,则使其动态化)。 In my database I have a table with the the following fields: 在我的数据库中,我有一个包含以下字段的表:

ID , Name , Level , Parent_id . IDNameLevelParent_id Level can be 0 or 1 . Level可以为01 0 for main menu 1 for sub menu the id of a main menu is tied to the parent_id field. 主菜单为0 ,子菜单为1 ,主菜单的id绑定到parent_id字段。

So for instance: 因此,例如:

ID  Name           Level   Parent_id
1   Test           0      
2   Test2          0
3   Test_sub       1        1
4   Test_sub2      2        2

I have managed to get the main menu items from the db but now I am a little bit stuck. 我设法从数据库中获取了主菜单项,但是现在我有点卡住了。 This is my code any help would be appriciated. 这是我的代码,将提供任何帮助。

<?php 
$q2= "SELECT * from menu where level = 0 ";
$q2result = $db->query($q2);
while($a2 = $q2result->fetch(PDO::FETCH_ASSOC)){
    echo "  
 <ul> 
    <li><a href='#' ><span> " . $a2['name'] . "  </span></a>
    <ul>
        <li><a href='#' ><span> test </span></a></li>
    </ul>
</ul>
";  
}
?>

First load all your datas into variables. 首先将所有数据加载到变量中。 Never print/echo while in SQL statement. 在SQL语句中切勿打印/回显。

 <?php 
  $q2= "SELECT * FROM menu ORDER BY Level ASC";
  $q2result = $db->query($q2);
  $nodes=array();
  while($a2 = $q2result->fetch(PDO::FETCH_ASSOC)){
    // assuming one parent node has already been assigned, due do level order into the SQL
    if($node['Level']>0 && isset($nodes[$a2['id']])) {
      $nodes[$a2['id']]['nodes'][]=$a2;
    } else {
      // parent node
      $nodes[$a2['id']]=$a2;
      $nodes[$a2['id']]['nodes']=array();
    }

  }

  print "<ul>";
  foreach($nodes as $node) {
    print "<li>";
      print "<a href='#'>".$node['Name']."</a>";
      if(sizeof($node['nodes'])>0) {
        print "<ul>";
        foreach($node['nodes'] as $subnode) {
          print "<li><a href='#'>".$subnode['Name']."</a></li>";
        }
        print "</ul>";      
      }
    print "</li>";
  }
  print "</ul>";
?>

This may be much more improved, but with this, you can do what you ask, and improve it. 这可能会大大改善,但是有了它,您可以按自己的要求进行改进。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM