我有以下页表;
+---------+------------------+-----------------------+-----------+-------+
| 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/