Многоуровневое меню сайта с развёрнутыми текущими уровнями
Многоуровневое меню может потребоваться на содержащих большое количество информации сайтах самых разных назначений: сайтах-каталогах продукции или услуг, интернет-магазинах, каталогах статей или информационных сайтах. Нередко даже имеющие опыт в нескольких годах веб-мастера теряются перед проблемой: как сделать, чтобы при открытии некоторого пункта каталога развёрнутыми были все пункты предыдущих уровней, являющимися над-уровнями открытого некоторого пункта.
Так, например, есть пункт первого уровня - "Техника", пункт второго уровня - "Техника для дома" и пункт третьего уровня - "Пылесосы". Требуется достичь, чтобы при открытии (активизации) пункта "Пылесосы" был развёрнут не только пункт второго уровня "Техника для дома", но и остальные пункты второго уровня, например, "Товары для офиса", а также, чтобы развёрнутым оставался не только пункт "Пылесосы", но и остальные пункты третьего уровня, относящиеся к "Технике для дома".
Иной раз ищут решение задачи многоуровневого меню на javascript и находят его, но нелишне помнить, что большое количество javascript-кода отрицательно влияет на скорость загрузки страниц сайта. Здесь предлагается решение многоуровнего меню с развёрнутыми текущими уровнями, реализуемое только средствами PHP и математической логики.
О логических операциях с логическими же функциями можно узнать из материала "Булева алгебра (алгебра логики)".
Итак, приступим к созданию многоуровневого меню, которое в нашем случае будет трёхуровневым, а если хотите больше уровней, то поняв логику выведения первых трёх уровней, сможете нарастить конструкцию. Однако на практике многоуровневое меню чаще всего бывает именно трёхуровневым.
Первое, что необходимо сделать, это создать в базе данных сайта таблицу categories.
Код PHP/MySQL
Важно иметь в виду, что такая таблица позволяет организовать многоуровневое меню с неограниченным числом уровней: каждый пункт меню, имеющий идентификатор, может иметь сколь угодно "потомков", каждый из которых также может иметь "потомков". Самый первый уровень имеет значение поля parent_id равное нулю.
Далее, в самой верхней части файла, который отвечает за вывод всех уровней нашего многоуровневого меню, например, файла страниц каталога cat.php, следует разместить код, в котором переменным, являющимся частью адреса текущей страницы сайта, присваиваются значения, передаваемые методом GET.
Код PHP
Конструкции, приведённые в коде выше, являются предметом вопроса в Тесте по теме Программирование PHP/MySQL.
И, наконец, самое интересное - логика организации многоуровневого меню, в нашем случае - трёхуровневого. С первым уровнем, надо полагать, всё сразу понятно: из базы данных выбираются те пункты меню, поле parent_id которых имеет значение 0. Второй уровень несколько посложней: выбираются те пункты меню, которые соответствуют активному состоянию одного из пунктов меню первого уровня. Аналогично работает и третий уровень: выбираются те пункты меню, которые соответствуют активному состоянию одного из пунктов меню второго уровня.
Код PHP
При этом все уровни, по которым проходит путь к активному пункту меню последнего уровня, остаются открытыми. Это достигается передачей методом GET частей адреса текущей страницы, формируемых из идентификаторов категорий.
В реализации многоуровневого меню широко задействована алгебра логики. Научиться комбинировать различные условия для выборок из базы данных можно на материале "Булева алгебра (алгебра логики)".
А об операциях для манипулирования данными из баз данных - материал "Реляционная алгебра"
Поделиться с друзьями