Построение двухуровневой навигации из базы данных с помощью While () - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь построить панель навигации, используя страницы, хранящиеся в базе данных.Ничего сложного для первого уровня, но становится сложнее, когда страницы должны быть перечислены как дети одного и того же родителя.вот мой код:

$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"], равный идентификатору матери.В то время как while () имеет дело с 3 типами контента: одна страница, раскрывающаяся страница и элементы кнопки раскрывающегося списка.

Я перепробовал множество методов PHP.Первый уровень отображается правильно, но массив $ dropdown остается пустым при использовании в цикле while ().При выводе за пределы функции while () показывается содержимое, которое я прошел через else {}

Можете ли вы увидеть что-то не так в этом коде и как лучше всего создать навигацию?Дайте мне знать, если я могу предоставить больше информации.Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 19 ноября 2018

Ваш код не работает, потому что, когда он находит страницу с $pages["dropdown"] == "oui", массив $dropdown всегда пуст.

Причина, по которой он всегда пуст, заключается в том, что ваш запрос возвращает выпадающий элемент ""страницы в конце, после всех выпадающих" кнопок "страниц.Если вы добавите var_dump($dropdown) в несколько стратегических мест в цикле, вы увидите это сами.

Быстрое хакерское исправление изменяет порядок вашего запроса, так что выпадающие "элементы" (с родителем> 0) возвращаются первыми:

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

Это заставит каждую выпадающую «кнопку» включать каждый выпадающий «элемент», включая те, которые не связаны.Порядок сортировки потребует дальнейших изменений, чтобы ваш текущий подход работал так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...