Багаторівневе меню на php і mysql
У цій статті я покажу, як можна створювати багаторівневе меню на PHP і MySQL. Безумовно, варіантів його створення можна придумати багато, але, судячи з кількості Ваших питань на цю тему, Вам потрібен приклад. І його я приведу в цій статті. Відразу зазначу, що дана стаття має сенс тільки для тих, хто знає PHP і вміє працювати з MySQL. Всім іншим спочатку треба пройти цей курс, або прочитати якісь книги по PHP і MySQL.
Для початку створимо таблицю в базі даних з наступними полями:
- id - унікальний ідентифікатор.
- title - анкор посилання в меню.
- link - адреса, на який буде вести пункт меню.
- parent_id - батьківський ID. Якщо батьківського пункту немає, то тут буде NULL (або можна ще 0 поставити).
З таблицею розібралися, тепер прийшов час PHP-коду. повний PHP-код наведено нижче:
lt ;?php
$ mysqli =new mysqli("Localhost","Root","","Db") -// Підключаємося до БД
$ result_set = $ mysqli-gt;query("SELECT * FROM` menu` ") -// Робимо вибірку всіх записів з таблиці з меню
$ items = array() -// Масив для пунктів меню
while(($ row = $ result_set-gt;fetch_assoc())!=false) $ items[$ row["Id"]]= $ row-// Заповнюємо масив вибіркою з БД
$ childrens = array() -// Масив для відповідностей дочірніх елементів їх батьківським
foreach($ items as $ item){
if($ item["Parent_id"]) $ childrens[$ item["Id"]]= $ item["Parent_id"] -// Заповнюємо масив
}
function printItem($ item, $ items, $ childrens){
/ * Виводимо пункт меню * /
echo "" -
echo ".$ item["Link"]."" Gt; ".$ item["Title"].""-
$ ul =false-// Виводилися чи дочірні елементи?
while(true){
/ * Нескінченний цикл, в якому ми шукаємо всі дочірні елементи * /
$ key = array_search($ item["Id"], $ childrens) -// Шукаємо дочірній елемент
if(!$ key){
/ * Дочірніх елементів не знайдено * /
if($ ul) echo ""-// Якщо виводилися дочірні елементи, то закриваємо список
break-// Виходимо з циклу
}
unset($ childrens[$ key]) -// Видаляємо знайдений елемент (щоб він не виводився ще раз)
if(!$ ul){
echo ""
-// Починаємо внутрішній список, якщо дочірніх елементів ще не було
$ ul =true-// Встановлюємо прапор
}
echo printItem($ items[$ key], $ items, $ childrens) -// Рекурсивно виводимо всі дочірні елементи
}
echo ""-
}
?gt;
id="Menu"gt;
Меню
lt ;?php
foreach($ items as $ item){
if(!$ item["Parent_id"]) echo printItem($ item, $ items, $ childrens) -// Виводимо всі елементи верхнього рівня
}
?gt;
Цей код повністю робочий, проте, Ви повинні розуміти, що так ніхто не пише (зокрема, висновок через echo HTML-тегів). І Ваше завдання взяти алгоритм з цього коду, але не сам код. А далі цей алгоритм підключити до свого движку. Я постарався ретельно прокоментувати код виведення багаторівневого меню на PHP і MySQL, але, безумовно, він не надто прозорий і вимагає вже непоганих початкових знань. Якщо Ви ще погано знаєте PHP і MySQL, то спочатку настійно рекомендую пройти цей курс. Після проходження даного курсу Ви зможете самостійно писати подібні скрипти і навіть набагато складніше.
Вийшов відеокурс "створення інтернет-магазину на php і mysql"
Вийшов відеокурс "php і mysql з нуля до гуру"
Як зробити підписку на сайті (v2)
Як дізнатися кількість записів в sql-вибірці
Як дізнатися останній id в mysql
Як знайти помилку в sql-запиті
Як динамічно отримувати коментарі з бази даних.
Як зробити динамічне додавання коментарів, використовуючи ajax.
Як зробити коментування на сайті
Як дізнатися, скільки змінилося рядків після update
Індекси в mysql
Перевірка зайнятості логіна на ajax
Статистика відвідувань на php
Запит sql на вибірку записів
Створення тригерів в mysql
Клас для роботи з базою даних
Підключення до бази даних в php
Різниця між sql і mysql
Mysql
Оптимізація запитів до mysql
Навігація по сторінках на php
Як зробити підписку на сайті (v2)
Як динамічно отримувати коментарі з бази даних.
Як зробити коментування на сайті
Запит sql на вибірку записів
Як дізнатися кількість записів в sql-вибірці
Індекси в mysql
Як знайти помилку в sql-запиті
Відправлення запитів до бази даних в php
Створення тригерів в mysql
Mysql