Сьогодні я розповім, як на PHP і MySQL створювати ієрархічне дерево.
Взагалі вони будуються де тільки можливо. Головне правильно його побудувати і застосувати.
Створимо таблицю, виконавши SQL-запит в PHPMyAdmin:
Тепер потрібно заповнити нашу таблицю записами. В результаті, повинна вийде приблизно така таблиця:
Можна заповнити тестову таблицю запитом:
З базою даних все! Далі йдемо до формування самого дерева розділів.
Зробимо запит і сформуємо зручний масив для подальшої роботи.
Зараз будемо будувати дерево. Для побудови будемо використовувати рекурсивную функцію.
Ієрархічне дерево матиме таку структуру:
Створимо рекурсивную функцію build_tree (). Вона будуватиме наше ієрархічне дерево абсолютно будь-якої вкладеності.
Для побудови дерева, в коді прописуємо:
Так ось в два кроки ми створили ієрархічне дерево розділів сайту і не важливо скільки там розділів!
Для побудови такого дерева запускаємо функцію build_tree c такими параметрами:
Велике спасибі за відповідь.
Якщо можна, ще одне питання. А як в такому випадку створювати лінки на каталоги? В БД вносити повні шляхи, наприклад запис для Розділу 1.1.1
«Раздел_1 / Подраздел_1.1 / Подраздел_1.1.1 /»
або краще вносити запис тільки для даного підрозділу, тобто «Подраздел_1.1.1». Якщо друге, то як їх потім об'єднати?
Максим Нікіфо $ LastName = htmlspecialchars ($ _ POST [ 'LastName']);
$ Name = htmlspecialchars ($ _ POST [ 'name']);
$ Floor = $ _POST [ 'floor'];
$ Email = mysql_real_escape_string ($ _ POST [ 'email']);
$ Password = md5 ($ _POST [ 'password']);
$ Phone = $ _POST [ 'phone'];
$ Data = $ _POST [ 'data'];
$ Country = $ _POST [ 'country'];
$ Region = $ _POST [ 'region'];
$ City = $ _POST [ 'city'];
$ Rdate = date ( «Y-m-d H: i: s»);
це все круто звичайно. Але працює тільки якщо у вас рейтингів не більше 100
У мене в базі 40 тисяч записів. Такий метод не актуальний, бо розрахунок відбувається майже 10 хвилин. Жодна людина не буде чекати при переході по сторінках коли трапиться «чудо» і сервер прорахує ЦЕ.
Запитайте, чому так багато? Мені потрібно побудувати дерево регіонів - міст. за схемою СВІТ - КРАЇНА - ОБЛАСТЬ (штат / округ) - населений пункт. Що б не займало багато місце, нащадки ховаються під вкладений список батьків, і відображаються лише при натисканні на батька (список розкривається).
Як вирішити цю задачу, ще не придумав, є ідеї?
Ну під «глобальні завдання», потрібні і «глобальні сервера».
А взагалі, вам тут рекурсія не потрібна. У вас відома глибина вкладеності - три (світ, країна, область). Ось і робіть виходячи з вкладеності.
Потрібно завжди робити вибірку саме тієї інформації, яка потрібна користувачу. Технологія ajax Вам на допомогу.
Можна вибірку розділити на етапи використовуючи ajax. Вибираєте спочатку континент (за вибором йде ajax-запит з id континенту і повертається список країн, його вставляєте в следуйщій selest), при виборі країни довантажувати вже регіони і т.д. Так будуть запити набагато менше, і не буде вибірок не потрібною користувачеві інформації.
Найреальніше і зрозуміле побудова дерево, з усіх які раніше зустрічав. Дякуємо!
Дякуємо. дуже допомогли)
Дякую за статтю. Майже те, що шукав, але не можу вирішити проблему з пагінацією. Масив формується майже правильно, сама функція виводить в обрізаному вигляді, через те, що деяких елементів немає в батьківському масиві. Хоча б натрапимо як вирішити проблему.
Підрозділ 2 -> Підрозділ 2.1 -> Підрозділ 2.1.2
Та й при тому що build_tree ($ cats, 2); то показує все правильно, але у мене ніяк не виходить порахувати, хелпмі плиз.
Спасибі вам! Дуже корисна річ, але цікавить одне питання.
Розділ 1
-розділ 1.1
-Розділ 1.1.1
-розділ 1.2
розділ 2
-розділ 1.1
-розділ 1.2
розділ 3
-розділ 3.1
і ми хочемо видалити -Розділ 1.1 то в цьому випадку розділ Розділ 1.1.1 і все його нащадки повинні будуть зміститися на рівень і повинно вийти:
Розділ 1
-розділ 1.1.1
-розділ 1.2
розділ 2
-розділ 1.1
-розділ 1.2
розділ 3
-розділ 3.1
далі ми вирішили видалити Розділ 2 і у нас повинно вийти:
Розділ 1
-розділ 1.1.1
-розділ 1.2
розділ 1.1
розділ 1.2
розділ 3
-розділ 3.1
підкажіть будь ласка необхідні запити до БД або логіку на PHP. Дякуємо!
Алладін, код для візуального тесту:
Добрий день Максим сорри за тупе питання дерево зробив а як визначити глибину мені потрібно 5 рівнів і не більше
Чи можна як то прописати стилі для цього і зробити акордеон? :)
а як розгорнути всю гілку?
Наприклад у мене 3 рівня вкладеності
При кліці на 1-й рівень передається id = 1, як мені перевірити чи є у цього батька нащадки що б вивести інформацію
Роблю висновок за допомогою ajax
Ну і вибірка для виведення:
yura,
дайте структуру таблиць в БД
Айболить,
порожні 03 і 05 а один ти повернув
А як додати клас css. що б як то відзначити ті пункти у яких є підпункти, або хоча б +/-
Доброго вам дня!