我在数据库(phpmyadmin)中有一个菜单,我用 while 循环将其输入到我的标题中。但其中一个菜单项有一个下拉菜单。如何更改下面的 while 循环以使其集成子菜单?换句话说,Home、How It Works、Blog、About 和 Contact
仍为链接,而 Services
仍为下拉列表,显示页面 Service1 的单独 while 循环,服务2,服务3...第n个服务
?
这是我到目前为止所做的工作
我的连接位于顶部
<?php
require_once('db/db_database.php');
// These are menu items Home(id=1), Services(id=2), How It Works(id=3), Blog(id=4), About(id=5), & Contact(id=6)
$sql = " SELECT * FROM menu WHERE id IN (1, 2, 3, 4, 5, 6) ";
$result = $conn->query($sql);
// These are submenu items Svs1(id=10), Svs2(id=20), Svs3(id=30)
$sql2 = " SELECT * FROM menu WHERE id IN (10, 20, 30) ";
$result2 = $conn->query($sql2);
?>
我的主菜单循环在没有子菜单的情况下工作正常
<?php
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo '<li class="nav-item dropdown active">';
echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
echo '</li>';
}
} else {
echo "0 results";
}
?>
以及我希望嵌套在上面的循环中的子菜单结构
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
Services
<i class="zmdi zmdi-chevron-down"></i>
</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="">
Service 1
</a>
</li>
<li>
<a class="dropdown-item" href="">
Service 2
</a>
</li>
<li>
<a class="dropdown-item" href="">
Service 3
</a>
</li>
</ul>
</li>
**请注意 li
中的整个类(class)组与常规链接不同,因此我更加困惑。此外,“服务”下拉列表按照显示顺序排在第二位。所以我不能只是将它单独添加到末尾,这就是为什么我假设它应该被嵌套以打破循环并在其余菜单项的后面重新启动循环。
附:我可以运行 3 个查询(1 个仅用于主页链接,另一个用于服务下拉列表,第三个用于其余菜单项),但我知道必须有更好的方法。
这是所需外观的想法
提前谢谢大家! 并不是说它会有所帮助,因为您需要连接,但是如果您想使用它,这里有一个代码笔,其中包含我用于此菜单的代码
编辑
为了让事情变得更容易,我现在拥有的东西工作得很好,但太臃肿了。 (3 个查询)
<?php
if ($resulthome->num_rows > 0) {
// output data of each row
while($row = $resulthome->fetch_assoc()) {
echo '<li class="nav-item dropdown active">';
echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
echo '</li>';
}
} else {
echo "0 results";
}
?>
<li class="nav-item dropdown active">
<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
Services
<i class="zmdi zmdi-chevron-down"></i>
</a>
<ul class="dropdown-menu">
<?php
if ($result2->num_rows > 0) {
// output data of each row
while($row = $result2->fetch_assoc()) {
echo '<li>';
echo '<a href="' . $row["link"] . '" class="dropdown-item">' . $row["pagename"] . '</a>';
echo '</li>';
}
} else {
echo "0 results";
}
?>
</ul>
</li>
<?php
if ($result1->num_rows > 0) {
// output data of each row
while($row = $result1->fetch_assoc()) {
echo '<li class="nav-item dropdown active">';
echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
echo '</li>';
}
} else {
echo "0 results";
}
?>
最佳答案
您可以在主菜单循环内使用带条件的子菜单循环。
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
if($row['id'] == 2){ // applies only for services
echo '<li class="nav-item dropdown active">';
echo '<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">';
echo $row["pagename"];
echo '<i class="zmdi zmdi-chevron-down"></i>';
echo '</a>';
// create a new list
echo '<ul class="dropdown-menu">';
// loop second/submenu query results
while($sub_row = $result2->fetch_assoc()) {
echo '<li>';
echo '<a href="' . $sub_row["link"] . '" class="dropdown-item">' . $sub_row["pagename"] . '</a>';
echo '</li>';
}
echo "</ul>";
echo '</li>';
}else{ // for all other menu links
echo '<li class="nav-item dropdown active">';
echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
echo '</li>';
}
}
} else {
echo "0 results";
}
关于php - 使用数据库值嵌套在 php while 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47600706/