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 и чтоб в глубину не шло (как устроено большинство каталогов в инете) ?
заранее благодарен.
а можно усложнить вывод дерева ?
вот тот код который обсуждался:
Вообще то все правильно - да поможет нам рекурсия
Даю идею - как я делаю многовложенный каталог.
Заводи таблицу 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 и чтоб в глубину не шло (как устроено большинство каталогов в инете) ?
заранее благодарен.