我正在尝试使用数据库中存储的页面来构建导航栏。对于第一级来说,这没什么难的,但是当页面必须被列为同一父级的子级时,它将变得更加棘手。这是我的代码:
$dropdown = array();
while ($pages = mysqli_fetch_assoc($rq_page)) {
$url_pg = url_rewrite('page-' . $pages["id"] . '-' . $pages["intitule"] . '');
// Creating a dropdown button
if($pages["dropdown"] == "oui" && $pages["parent"] == 0) {
echo '<li class="nav-item dropdown">';
echo '<a class="nav-link dropdown-toggle" data-toggle="dropdown" id="Preview" href="#" role="button" aria-haspopup="true" aria-expanded="false">';
echo $pages["intitule"];
echo '</a>';
echo '<div class="dropdown-menu" aria-labelledby="Preview">';
foreach($dropdown as $variable) {
echo '<a class="dropdown-item" href="#">' . $variable . '</a>';
}
echo '</div>';
echo '</li>';
}
// If single page = no dropdown
else if($pages["dropdown"] == "non" && $pages["parent"] == 0) {
echo '<li class="nav-item">';
echo '<a class="nav-link" href="' . $url_pg . '">' . $pages["intitule"] . '</a>';
echo '</li>';
}
// If content is a dropdown item
else {
$dropdown[] = '"' . $pages["parent"] . '" => "' . $pages["intitule"] . '"';
}
}
所以。首先,我获得了数据库的内容。然后,我创建一个array()列出具有$ pages [“ parent”]等于母亲ID的所有内容。 while()处理三种类型的内容:单页,下拉页面和下拉按钮的项目。
我尝试了许多PHP方法。第一层显示正确,但在while()循环中使用$ dropdown数组时,该数组仍然为空。在while()外部打印时,它显示了我通过else {}
传递的内容您能看到这段代码有什么问题吗?创建导航的最佳方法是什么?让我知道是否可以提供更多信息。 感谢您的帮助。
答案 0 :(得分:0)
您的代码不起作用,因为当找到具有$pages["dropdown"] == "oui"
的页面时,$dropdown
数组始终为空。
其始终为空的原因是,在所有下拉“按钮”页面之后,您的查询最后返回了下拉“项目”页面。如果将var_dump($dropdown)
添加到循环中的几个关键位置,您将自己看到它。
一个快速的hacky解决方案正在更改查询的顺序,以便首先返回下拉列表“ items”(parent> 0):
SELECT id, intitule, parent, dropdown FROM db_page ORDER BY parent DESC
这将使每个下拉“按钮”包括每个下拉“项目”,包括不相关的项目。排序顺序将需要进一步修改,以使您当前的方法按预期方式工作。