PHP “хлебные крошки”

415
06 сентября 2017, 12:26

Здравствуйте! Необходимо сделать навигацию(хлебные крошки):

При этом Домой является родителем для Библиотека, а Библиотека является родителем для Данные. Для это в бд в таблице была создана ячейка parent_id Вся информация хранится в базе и подгружается только на одну страницу. Как это можно реализовать? Как понять что сейчас нужны вывести Данные, а не Библиотека? Помогите кто чем может) P.S. Страницы (Библиотека, Данные, ...) формируются динамически

Answer 1
//Определяем переменную parent_id
$parent_id = isset($_GET['parent_id']) ? $_GET['parent_id'] : null;
function breadcrumb($cat, $id){
//Проверяем что ID это число
if(!intval($id)) return false;
//Создаем пустой массив
$brc = array();
//Перебираем полученый массив с меню
for($i = 0; $i < count($cat); $i++){
    //Проверяем что мы не нашли родителя и не массив пуст
    if($id != 0 and !empty($cat[$id])){
        //Ищем родителя
        $brc[$cat[$id]['id']] = $cat[$id]['title'];
        $id = $cat[$id]['parent'];
    }
    //Останавливаем цикл
    else break;
}
//Возвращаем перевернутый массив с сохранением ключей
return array_reverse($brc, true);
}
Answer 2

Для это в бд в таблице была создана ячейка parent_id

Этого мало. Такая организация данных позволяет выбрать всех предков текущего раздела (что и нужно для "хлебных крошек") только рекурсивными обращениями к базе. Возможно, это можно обойти процедурой.

Существует четыре популярных метода хранения деревьев, чтобы различные их фрагменты можно было выбирать без рекурсии:

  1. Adjacency List («список смежности»)
  2. Materialized Path («материализованный путь»)
  3. Nested Sets («вложенные множества»)
  4. Closure Table («таблица связей»)

Информация отсюда: https://habrahabr.ru/post/193166/

Сам я пользуюсь обычно "Materialized Path" в упакованном виде (path CHAR(248)). Это автоматом вводит дополнительное (в другом месте архитектуры) ограничение на глубину дерева. Это самый простой "дубовый" (понятный) способ, и пофиг на лишние данные. Да и "Closure Table" это в принципе что-то подобное, только распакованное в отдельную реляцию, поэтому, он мне тоже нравится. "Nested Sets", вроде бы, используется в WordPress.

READ ALSO
Правильность верстки

Правильность верстки

Здравствуйте! Столкнулся с проблемойПодскажите, пожалуйста, как правильно будет это сверстать? Проблема именно в выравнивании данных, как...

259
Возможно сделать pie chart на чистом css

Возможно сделать pie chart на чистом css

Стоит задача написать pie chart (кругавая диаграма) на чистом CSSЕсть ли возможность реализовать это?

270
Flexbox сетка c одинаковыми отступами

Flexbox сетка c одинаковыми отступами

Необходимо сделать flex-box сеткуРасстояние между колонками фиксированное - 10px

307
Открытие div по нажатию с задержкой

Открытие div по нажатию с задержкой

Добрый день, нужно есть скрипт открывающий скрытый див по нажатию на ссылкуНужно сделать открытие с задержкой в 3сек, как это сделать? settimeout...

326