使用While()

时间:2018-11-19 19:12:16

标签: php bootstrap-4

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

$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 {}

传递的内容

您能看到这段代码有什么问题吗?创建导航的最佳方法是什么?让我知道是否可以提供更多信息。 感谢您的帮助。

1 个答案:

答案 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

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