Неизвестное число подуровней-как сделать

kekc

Guest
извините что поднимаю старую тему.
а можно усложнить вывод дерева ?

вот тот код который обсуждался:

Вообще то все правильно - да поможет нам рекурсия

Даю идею - как я делаю многовложенный каталог.
Заводи таблицу table_categories где

itemid int(4) // сам елемент
parent_categid int(4), // его родитель
level smallint, // на какой глувине сидит элемент
sort //сортировочное значение - определяет место
// элемента в листе
name varchar(64), // имя элемента
......................................
ну и так далее - все что тебе надо
или лучше в другой таблице собирать данные на элемент
а эту оставить для построени дерева

ну кака записать элемент - вроде ясно из определения полей.
Стартуем со значения level = 0 Это будут категории а для
вложенных элементов указываем parent_categid и level



// определяем переменные
$data; //масив где соберем данные
$count_item=0; //счетчик
$db; //соединение с базой


function get_tree($db, $parent_categid) {
global $data, $count_item;
if(!$parent_categid) $parent_categid = 0;
$sql = "SELECT * FROM table_categories where parent_categid=$parent_categid
ORDER BY level DESC, sort";
$result = mysql_query($sql,$db);
$rows = mysql_num_rows($result);
for($i=0; $i<$rows; $i++) {
$tmp = mysql_fetch_object($result);
$data[$count_item] = $tmp;
$count_item++;
$child = $tmp->itemid;
$get_tree($db, $child); // вот она родимая (рекурсия)
}
}
return $data;
}

Ну а нарисовать дерево - вроде просто
$data=get_tree($db, $parent_categid);
for($i=0; $i<$count_item; $i++) {
$str_level = "";
$val = $data[$i];
for($k=0; $k<$val->level; $k++) {
$str_level .= "* ";
}
$itemid = $val->itemid;
$name = $val->name;

echo "<BR>".$str_level.$itemid.$name;
}

==========================
тоесть чтоб выводилась нужная глубина ветки.
Тоесть если parent_categid = 0 то выводятся только те записи из базы у которых этот parent_categid = 0.. когда заходим в одну из категорий (допустим itemid = 2) выводились помимо записей parent_categid = 0, выводились под этой категорией со смещением только те записи у кторых parent_categid =2 и чтоб в глубину не шло (как устроено большинство каталогов в инете) ?

заранее благодарен.
 

Фанат

oncle terrible
Команда форума
не извиним.
заставлять посетителей форума читать длиннющий тред чтобы в результате добраться в конце до твоего вопроса - это свинство.
 

kekc

Guest
исправил свой пост

-~{}~ 11.07.05 14:05:

FANTAzeRus - нет не так... у тебя подкатегории сразу видны, а мне нужно чтоб подкатегории открывались по щелчку на данную категорию... причем открываться должны подкатегории только данной категории, а не все
 

FANTAzeRus

Guest
т.е. при первичном выводе должен быть видет ТОЛЬКО root элемент??? Если да то выводи ПЕРВИЧНО только с clevel=0 куда уж проще у меня первичный вывод clevel=1
 

kvf77

Red Devil
Вот здесь есть готовый пример базирующийся на Nested Sets:
http://www.webscript.ru/stories.php3?story=03/10/22/6752491
Тебе надо пункт Выводим "приоткрытое" дерево для элемента
 

kekc

Guest
Автор оригинала: kvf77
Вот здесь есть готовый пример базирующийся на Nested Sets:
http://www.webscript.ru/stories.php3?story=03/10/22/6752491
Тебе надо пункт Выводим "приоткрытое" дерево для элемента
спасибо, но это немного не то что мне нужно... меня интересует как подправить данный код, чтоб получить то что нужно...
 

kvf77

Red Devil
kekc
что значит "немного не то"? совсем уже обленился народ. тебе дали код, который делает именно то, что тебе надо - неужели трудно разобраться как он работает и подправить свой код? ты хочешь, чтобы мы начали за тебя это делать? тогда это уже за деньги и не в этот форум.

Твоя задача решается достаточно просто, а идеи тебе уже подсказали - бери и пользуйся. вот когда будет реальный затык - приходи, а просить, чтобы за тебя написали - не надо
 

kekc

Guest
Автор оригинала: kvf77
kekc
что значит "немного не то"? совсем уже обленился народ. тебе дали код, который делает именно то, что тебе надо - неужели трудно разобраться как он работает и подправить свой код? ты хочешь, чтобы мы начали за тебя это делать? тогда это уже за деньги и не в этот форум.

Твоя задача решается достаточно просто, а идеи тебе уже подсказали - бери и пользуйся. вот когда будет реальный затык - приходи, а просить, чтобы за тебя написали - не надо
я не прошу чтобы за меня писали код. я посмотрел то что ты дал, поскольку я не так хорошо пока разбираюсь в пхп, мне сложно понять что там и как... поэтому и прошу подсказать по данному коду. в этом коде я разобрался именно поэтому мне нужно доработать именно его. А "немного не то" потому что там всеравно выводится вся ветка, а не ее определенное направление.
 

kvf77

Red Devil
kekc
там выводится только направление - плохо читал - тот пример полностью реализует твою идею.

Ок, решение писать не буду, но подскажу алгоритм:
1) всегда выводим все разделы с вложенностью 0.
2) по ID текущего раздела выясняем ID его родителя с уровнем вложенности 0
3) выводим ветку родителя до элемента, у которого вложенность равна вложенности текущего раздела + 1

Алгоритм понятен?
 

kekc

Guest
Автор оригинала: kvf77
kekc
там выводится только направление - плохо читал - тот пример полностью реализует твою идею.

Ок, решение писать не буду, но подскажу алгоритм:
1) всегда выводим все разделы с вложенностью 0.
2) по ID текущего раздела выясняем ID его родителя с уровнем вложенности 0
3) выводим ветку родителя до элемента, у которого вложенность равна вложенности текущего раздела + 1

Алгоритм понятен?
Алгоритм мне был понятен до написания этого сообщения.
Спасибо.
 

kvf77

Red Devil
kekc
то бишь, ты всетки хочешь, чтобы за тебя написали? задавай конкретные вопросы - поможем - но писать за тебя не будем
 

kekc

Guest
Автор оригинала: kvf77
kekc
то бишь, ты всетки хочешь, чтобы за тебя написали? задавай конкретные вопросы - поможем - но писать за тебя не будем
был не прав.
 
Сверху