php - PHP 中的动态菜单

标签 php jquery css drop-down-menu

我有以下页表;

+---------+------------------+-----------------------+-----------+-------+
| page_id | page_name        | page_link             | parent_id | order |
+---------+------------------+-----------------------+-----------+-------+
|       1 | Main Units       |                       |         0 |     1 |
|       2 | Add Project      | add_project.php       |         1 |     2 |
|       3 | Add Activity     | add_activity.php      |         1 |     3 |
|       4 | Add PO Reference | add_porefrence.php    |         1 |     4 |
|       5 | Department       | department.php        |         0 |     5 |
|       6 | Users            | users.php             |         0 |     6 |
|       7 | Category         | category.php          |         0 |     7 |
|       8 | Item             | item.php              |         0 |     8 |
|       9 | Units            | units.php             |         0 |     9 |
|      10 | Stock            |                       |         0 |    10 |
|      11 | Stock In         | add_inventory.php     |        10 |    11 |
|      12 | Stock Out        | inventory_issue.php   |        10 |    12 |
|      13 | Stock List       | stock_list.php        |        10 |    13 |
|      14 | Items in Stock   | item_list.php         |        10 |    14 |
|      15 | Reports          |                       |         0 |    15 |
|      16 | Stock IN         | stock_in_report.php   |        15 |    16 |
|      17 | Stock Out        | stock_out_report.php  |        15 |    17 |
|      18 | Stock Card       | stock_card_report.php |        15 |    18 |
+---------+------------------+-----------------------+-----------+-------+

以及创建下拉菜单的代码。

<div class="menu">
  <span>
    <ul id="nav">
      <li><a href="#">Main Units</a>
        <div class="subs">
          <div>
            <ul>
              <li><a href="add_project.php" style="text-decoration:none;"><h3>Add Projects</h3></a></li>
              <li><a href="add_activity.php" style="text-decoration:none;"><h3>Add Activity</h3></a></li>
              <li><a href="add_porefrence.php" style="text-decoration:none;"><h3>Add PO. Reference</h3></a></li>
            </ul>
          </div>
        </div>
      </li>
      <li><a href="department.php">Departments</a></li>
</ul>
</span>
</div>

我想从数据库创建动态菜单,我写了这段代码但无法找到子菜单何时完成循环..

  <div class="menu">
                        <span>
                          <ul id="nav">
                            <?php

                                                      ?>
                    <?php while($rows=mysql_fetch_array($SQL_FETCH_PAGES)){

                      if ($rows['page_link'] != '' & $rows['parent_id'] == 0){
                        ?>

                        <li><a href="<?php echo $rows['page_link']; ?>"><?php echo $rows['page_name']; ?></a></li>
                        <?php
                      }
                      ?>
                      else if ($rows['page_link'] == '' & $rows['parent_id'] == 0){
                      ?>
                      <li><a href="<?php echo $rows['page_link']; ?>"><?php echo $rows['page_name']; ?></a>
                        <div class="subs">
                          <div>
                            <ul>
                              <?php
                            }
                            if($rows['page_link'] != '' & $rows['parent_id'] != 0){
                            <li><a href="<?php echo $rows['page_link']; ?>"><?php echo $rows['page_name']; ?></a></li>
                          }
                          >?
                            </ul>
                          </div>
                        </div>
                      </li>
                          <?php  }
                            ?>
                              <li><a href="logoff.php">Logout</a></li>
                            </ul>
                          </span>
                        </div>

查询以获取 select * from pages order by order;

最佳答案

永远不要在 HTML 代码中执行 mysql 查询!如果您不使用任何类似 MVC 的结构,则在文件顶部执行它并缓存在一些局部变量中。

但是,您并没有检查父子关系。

if($rows['page_link'] != '' & $rows['parent_id'] != 0){

您应该检查您的 parent_id 是否存在依赖关系,最好的方法是通过递归来完成。但是,如果您的下拉菜单不超过 2 级,那么这段代码应该可以正常工作一段时间。

<?php
foreach ($rows as $row) {
    if ($row['page_link'] != '' && $row['parent_id'] == 0) {
?>
    <li><a href="<?php echo $row['page_link']; ?>"><?php echo $row['page_name']; ?></a></li>
<?php
    }
    else if ($row['page_link'] == '' && $row['parent_id'] == 0) {
?>
    <li><a href="#"><?php echo $row['page_name']; ?></a>
    <div class="subs">
        <div>
            <ul>
                <?php
                    foreach ($rows as $children) {
                        if ($children['parent_id'] == $row['id']) {
                            ?>
                                <li><a href="<?php echo $children['page_link']; ?>"><?php echo $children['page_name']; ?></a></li>
                            <?php
                        }
                    }
                ?>
            </ul>
        </div>
    </div>
</li>
<?php
    }
?>

但目标是通过递归构建菜单,而不是像上面那样的方式。例子数不胜数how to do it .

关于php - PHP 中的动态菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28601116/

相关文章:

html - 如何停止幻灯片在滚动条上移动

javascript - 为什么 "sticky"javascript 不能在 Firefox/IE 中运行?

php - 2数组循环php中的下一个元素

php - 用于检查网站 url 的正则表达式

php - Silverstripe 3.0-脚本标签在保存和发布后从编辑器内容中删除

javascript - 取消 .fail() 函数中的 jQuery ajax 错误

PHP : Correct string comparison with special characters

java - 将 DATE 插入 MYSQL 数据库..将值从 Android 发送到 PHP

javascript - 滚动时实时更新绝对定位的div

html - 如何为 <selection><option> 添加图片?