Forum Webscript.Ru
Программирование => PHP => Тема начата: slash2k от 23 Августа 2005, 16:56:10
-
Есть таблица categories.
CREATE TABLE categories (
id int(10) unsigned NOT NULL auto_increment,
name varchar(128) NOT NULL default \'\',
left_key int(10) unsigned NOT NULL default \'0\',
right_key int(10) unsigned NOT NULL default \'0\',
level int(10) unsigned NOT NULL default \'0\',
parent_id int(10) unsigned NOT NULL default \'0\',
PRIMARY KEY (id),
KEY cleft (left_key,right_key,level)
) TYPE=MyISAM;
#
# Дамп данных таблицы \'categories\'
#
INSERT INTO categories VALUES (162, \'ывфы\', 13, 14, 2, 158);
INSERT INTO categories VALUES (163, \'ывыфв\', 6, 11, 3, 159);
INSERT INTO categories VALUES (164, \'ыфвыфв\', 7, 8, 4, 163);
INSERT INTO categories VALUES (165, \'ыфвфыв\', 19, 30, 2, 161);
INSERT INTO categories VALUES (166, \'фывфыв\', 20, 29, 3, 165);
INSERT INTO categories VALUES (157, \'Новости\', 2, 3, 1, 1);
INSERT INTO categories VALUES (158, \'Статьи\', 4, 15, 1, 1);
INSERT INTO categories VALUES (1, \'Главная\', 1, 32, 0, 0);
INSERT INTO categories VALUES (170, \'wqe\', 22, 23, 5, 168);
INSERT INTO categories VALUES (168, \'цйуйу\', 21, 26, 4, 166);
INSERT INTO categories VALUES (169, \'йцуйцу\', 27, 28, 4, 166);
INSERT INTO categories VALUES (161, \'в\', 18, 31, 1, 1);
INSERT INTO categories VALUES (167, \'цйу\', 9, 10, 4, 163);
INSERT INTO categories VALUES (160, \'ыфв\', 16, 17, 1, 1);
INSERT INTO categories VALUES (159, \'2005\', 5, 12, 2, 158);
INSERT INTO categories VALUES (171, \'wqeq\', 24, 25, 5, 168);
Есть картинки типа
|
|--
|_.
Как при помощи всего этого сделать древовидную карту сайта (по типу http://www.unesco.ru/rus/pages/sitemap.php), всмысле как правильно поставить картинки, чтобы получилось дерево?
-
учитывать уровень вложенности, тот самый level
-
Не как это сделать без картинок это я знаю.
$query="SELECT * FROM categoties ORDER BY left_key ASC";
$result= mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo str_repeat(" ",6*$row[\'level\']).$row[\'name\']."
";
}
?>
А вот как поставить перед $row[\'name\'] соотв. картинтку (ведь это может быть и последней категорией у родителя и т.д...) ?
-
Ну подумай голово немного, поищи зависимости :
родитель: INSERT INTO categories VALUES (158, \'Статьи\', 4, 15, 1, 1);
последняя категория у родителя : INSERT INTO categories VALUES (162, \'ывфы\', 13, 14, 2, 158);
родитель : INSERT INTO categories VALUES (163, \'ывыфв\', 6, 11, 3, 159);
последняя категория у родителя : INSERT INTO categories VALUES (167, \'цйу\', 9, 10, 4, 163);
Неужели зависимостей не видно ?
PS
смотри на значения left_key, right_key
-
Уж извини, но чего-то я не вижу :)
-
у последнего чайлда right_key на единицу меньше чем у родителя
-
Спасибо, я понял, но все равно получается такая картина.
Главный родитель
|
|--Родитель 1
| |
| |--Сын 1
| |
| |_Cын-Родитель 2
| | |
| | |--Сын 1
| | |
| | |_ Сын 2
|
|_Родитель 2
| |
| |--Сын 1
| |
| |_Cын-Родитель 2
| | |
| | |--Сын 1
| | |
| | |_ Сын 2
Как учесть какое количество | и пробелов нужно ставить около $row[\'name\']?
Тем более в некоторых местах может быть 3 палочки и 1 пробел, а в других 3 палочки, пробел, 1 палочка. Т.е может быть чередование.
-
так ты палочки рисуешь или картинки разные подставляешь?
всмысле как правильно поставить картинки, чтобы получилось дерево?
Как учесть какое количество | и пробелов
-
slash2k
сначало сядь и тот HTML-код который ты хочешь сгенерировать напиши вручную. Это тебе нужно чтобы четко знать, что должно получиться в результате.
О кол-ве палочек можно судить по уровню текущего узла (level)
-
О кол-ве палочек можно судить по уровню текущего узла (level)
Это то понятно. Но ведь может быть так, что кроме палочек в ряду, будут и пробелы. Тут надо какой-то алгоритм. Наверное ведь кто-то уже сталуивался с такой проблемой!
-
я по мере прохождения дерева заполняю массив $depth_markers "палочками" и "пробелами" (в моем случае вариантов больше так как я раскрываю только отдельные ветки дерева). Каждый из еллементов массива содержит маркер (пробел или палочку) родителя соответствующего уровня.
[|] [|] [--] Сын 1
а чтобы определить, какой именно маркер ставить вполне достаточно знать level, right_key, left_key текущего узла и его родителя.
[OFF]до чего народ ленивый пошел... почти месяц ждать ответа на форуме вместо того чтобы самому подумать и написать...[/OFF]
-
А можно код?:)