我正在尝试使用数据库中存储的页面来构建导航栏。对于第一个级别来说,没有什么困难,但是当页面必须被列为同一个父级的子级时,就变得更加棘手了。这是我的密码:
$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"] . '"';
}
}所以。首先,我获得数据库内容。然后,我创建了一个数组()来列出每个具有$pages“父”等于母亲ID的内容。while()处理3种类型的内容:单页、下拉页面和下拉按钮的项。
我尝试了许多PHP方法。第一个级别显示正确,但是当将$dropdown数组用于while()循环时,它仍然是空的。当在while()之外打印时,它将显示我通过of {}传递的内容。
您能在这段代码中看到错误吗?创建导航的最佳方法是什么?如果我能提供更多的信息,请告诉我。谢谢你的帮助。
发布于 2018-11-19 20:08:24
您的代码无法工作,因为当它找到一个具有$pages["dropdown"] == "oui"的页面时,$dropdown数组总是空的。
它总是空的原因是因为在所有下拉“按钮”页面之后,查询返回下拉"item“页面。如果将var_dump($dropdown)添加到循环中的几个战略位置,您将亲自看到它。
一个快速的hacky修复方法是更改查询的顺序,以便首先返回下拉"items“(使用parent>0):
SELECT id, intitule, parent, dropdown FROM db_page ORDER BY parent DESC这将使每个下拉“按钮”包括每一个下拉“项目”,包括那些不相关的。排序顺序将需要进一步修改,以使您当前的方法按您预期的方式工作。
https://stackoverflow.com/questions/53381156
复制相似问题