Багаторівневе меню на 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