Багаторівневе меню на php і mysql

Багаторівневе меню на 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, то спочатку настійно рекомендую пройти цей курс. Після проходження даного курсу Ви зможете самостійно писати подібні скрипти і навіть набагато складніше.

    Поділися в соціальних мережах:

    Схожі
    Як зробити підписку на сайті (v2)Як зробити підписку на сайті (v2)
    Як динамічно отримувати коментарі з бази даних.Як динамічно отримувати коментарі з бази даних.
    Як зробити коментування на сайтіЯк зробити коментування на сайті
    Запит sql на вибірку записівЗапит sql на вибірку записів
    Як дізнатися кількість записів в sql-вибірціЯк дізнатися кількість записів в sql-вибірці
    Індекси в mysqlІндекси в mysql
    Як знайти помилку в sql-запитіЯк знайти помилку в sql-запиті
    Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
    Створення тригерів в mysqlСтворення тригерів в mysql
    MysqlMysql
    » » Багаторівневе меню на php і mysql