Вывод дерева php

12
chemax
На сайте с 07.01.2009
Offline
206
2504

id title link nes

1 Меню 1 # 0

2 Меню 2 # 0

3 Меню 3 # 0

4 Подменю 1 # 1

5 Подменю 2 # 1

6 Подменю 3 # 1

7 Подменю 4 # 1

8 Подменю 5 # 1

9 Подменю 6 # 2

10 Подменю 7 # 2

11 Подменю 8 # 2

12 Подменю 9 # 3

13 Подменю 10 # 3

14 Подменю 11 # 4

15 Подменю 12 # 4

16 Подменю 13 # 4

17 Подменю 14 # 16

18 Подменю 15 # 16

есть многоуровневая ситема категорий например

есть у кого нить библиотека, функция для вывода ее деревом?

nes - это категория в которую вложенно

Например что бы получилось:

Меню 1

--Подменю 1

----Подменю 11

----Подменю 12

----Подменю 13

------Подменю 14

------Подменю 15

--Подменю 2

--Подменю 3

--Подменю 4

--Подменю 5

...

и тд и тп, вплоть до бесконечности...

Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
vanea84
На сайте с 09.01.2010
Offline
56
#1

Могу сделать, какая CMS

chemax
На сайте с 07.01.2009
Offline
206
#2

без разницы какая кмс, типо таблица наверху.

я хочу суть понять) полдня мозг ломал) больше двух уровней не могу)

понимаю что в цикл надо загнать, но без указания максимального уровня вложенности мозг не думает)

vanea84
На сайте с 09.01.2010
Offline
56
#3
chemax:
без разницы какая кмс, типо таблица наверху.
я хочу суть понять) полдня мозг ломал) больше двух уровней не могу)
понимаю что в цикл надо загнать, но без указания максимального уровня вложенности мозг не думает)

Ну если сам пытаешься ,тогда тебе подсказка!

Это реализовано в DLE. смотри файл "/engine/inc/categories.php"

chemax
На сайте с 07.01.2009
Offline
206
#4
vanea84:
Ну если сам пытаешься ,тогда тебе подсказка!
Это реализовано в DLE. смотри файл "/engine/inc/categories.php"

на сколько помню там сам запрос по кругу гоняется.

имхо, не разумно. таких решений по сети много)

E
На сайте с 31.03.2008
Offline
85
#5

смотрите в сторону рекурсий

chemax
На сайте с 07.01.2009
Offline
206
#6

да догнал с утреца как что бы запрос не гонять по кругу)

вчера передумал видать)

_savit
На сайте с 19.03.2006
Offline
135
#7

смотрите тут: http://phpclub.ru/faq/Tree/AlPrintAll?v=1crk

просто замените названия переменных на свои и все заработает

https://vk-botovod.ru - комбайн ВКонтакте, мультимессенджер, эмулятор жизни аккаунтов
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#8
chemax:
да догнал с утреца как что бы запрос не гонять по кругу)
вчера передумал видать)

Зачем его гонять то? Выдерните все данные какие нужны и уже данные крутите.

А ну собственно _savit, уже дал ссылку на мою идею :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Александр
На сайте с 03.04.2009
Offline
62
#9

Товарищи php-шники, может вы мне поможете с решением проблеммки?

Есть DLE и модуль Category Tree, который автоматом выводит категории. Все ок, сколько угодно уровней, но проблема с формированием ЧПУ категорий 2-го и 3-го уровней. Т.е. он вместо site.ru/category/subcategory/ формирует site.ru/subcategory/ и аналогично с 3-м уровнем.

Вот код модуля:

if(! defined ( 'DATALIFEENGINE' ) ) {
die ( "Hacking Attempt!" );
}

$catlist = dle_cache( "category", $config['skin'] );

if( ! $catlist ) {

$listcat = $db->query( "SELECT * from `" . PREFIX . "_category` ORDER BY `posi`" );

while( $row = $db->get_array( $listcat ) )
{
$link = $config['http_home_url'] . $row['alt_name'] . '/';
$catlist .="d.add( {$row['id']}, {$row['parentid']}, '{$row['name']}', '{$link}', '{$row['descr']}' );";

}

$db->free();
create_cache( "category", $catlist, $config['skin'] );

}

?>

Буду признателен за помощь!

topy
На сайте с 28.03.2006
Offline
142
#10

У меня была такая таблица:


CREATE TABLE `menu` (
`id` int(5) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`parent` int(5) NOT NULL default '0',
`position` int(11) NOT NULL default '0',
`level` int(5) NOT NULL default '0',
PRIMARY KEY (`id`)
);

Запускал такую функцию.

(можно, конечно, и без position, но с position более красивое решение, позволяющее управлять позицией пункта меню относительно других)


function get_menu($parent, $lvl)
{
$page=$_GET['page'];
global $lvl;
$lvl++;
$result=mysql_query("SELECT * FROM menu WHERE parent=".$parent." ORDER BY position");
if (mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_array($result))
{
$id=$row["id"];
$name=$row["name"];
$level=$row['level'];
$position=$row['position'];
get_menu($id, $lvl);
$lvl--;
}
}
}

Обратите внимание, что принцип работы этой функции: вызывание самой себя

Проверки и прочие рюшечки добавите сами.

Если нужна помощь или консультация - велкам в личку.

Новости коротко и ясно (https://subnews.ru)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий