使用While()从数据库构建2级导航



我正试图使用数据库中存储的页面构建一个导航栏。对于第一级来说没有什么困难,但当页面必须列为同一父级的子级时,它会变得更棘手。这是我的代码:

$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方法。第一个级别显示正确,但$dropdown数组在while((循环中使用时保持为空。当在while((之外打印时,它显示我通过else{}传递的内容

你能在这段代码中看到错误吗?创建导航的最佳方法是什么?如果我能提供更多信息,请告诉我。谢谢你的帮助。

您的代码不起作用,因为当它找到一个具有$pages["dropdown"] == "oui"的页面时,$dropdown数组总是空的。

它总是空的原因是,您的查询在所有下拉"按钮"页面之后最后返回下拉"项目"页面。如果您将var_dump($dropdown)添加到循环中的几个战略位置,您将亲眼看到它。

一个快速的破解方法是更改查询的顺序,以便首先返回下拉列表"items"(父项>0(:

SELECT id, intitule, parent, dropdown FROM db_page ORDER BY parent DESC

这将使每个下拉"按钮"都包括每个下拉"项目",包括那些不相关的项目。排序顺序将需要进一步修改,以使您当前的方法按您期望的方式工作。

最新更新