Forum Webscript.Ru

Программирование => PHP => Тема начата: slash2k от 23 Августа 2005, 16:56:10

Название: Карта сайта на Nested sets ?
Отправлено: 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), всмысле как правильно поставить картинки, чтобы получилось дерево?
Название: Карта сайта на Nested sets ?
Отправлено: Демет от 23 Августа 2005, 17:18:36
учитывать уровень вложенности, тот самый level
Название: Карта сайта на Nested sets ?
Отправлено: slash2k от 23 Августа 2005, 17:31:29
Не как это сделать без картинок это я знаю.


$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\'] соотв. картинтку (ведь это может быть  и последней категорией у родителя и т.д...) ?
Название: Карта сайта на Nested sets ?
Отправлено: Макс от 23 Августа 2005, 18:43:08
Ну подумай голово немного, поищи зависимости :

родитель: 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
Название: Карта сайта на Nested sets ?
Отправлено: slash2k от 23 Августа 2005, 19:20:53
Уж извини, но чего-то я не вижу :)
Название: Карта сайта на Nested sets ?
Отправлено: Макс от 23 Августа 2005, 19:29:35
у последнего чайлда right_key на единицу меньше чем у родителя
Название: Карта сайта на Nested sets ?
Отправлено: slash2k от 23 Августа 2005, 19:41:50
Спасибо, я понял, но все равно получается такая картина.

Главный родитель
       |
       |--Родитель 1
       |            |
       |            |--Сын 1
       |            |
       |            |_Cын-Родитель 2
       |            |      |
       |            |      |--Сын 1
       |            |      |
       |            |      |_ Сын 2
       |
       |_Родитель 2
       |            |
       |            |--Сын 1
       |            |
       |            |_Cын-Родитель 2
       |            |      |
       |            |      |--Сын 1
       |            |      |
       |            |      |_ Сын 2


Как учесть какое количество | и пробелов нужно ставить около $row[\'name\']?

Тем более в некоторых местах может быть 3 палочки и 1 пробел, а в других 3 палочки, пробел, 1 палочка. Т.е может быть чередование.
Название: Карта сайта на Nested sets ?
Отправлено: Демет от 24 Августа 2005, 09:59:17
так ты палочки рисуешь или картинки разные подставляешь?
Цитировать
всмысле как правильно поставить картинки, чтобы получилось дерево?

Цитировать
Как учесть какое количество | и пробелов
Название: Карта сайта на Nested sets ?
Отправлено: Макс от 24 Августа 2005, 11:32:46
slash2k
сначало сядь и тот HTML-код который ты хочешь сгенерировать напиши вручную. Это тебе нужно чтобы четко знать, что должно получиться в результате.

О кол-ве палочек можно судить по уровню текущего узла (level)
Название: Карта сайта на Nested sets ?
Отправлено: slash2k от 17 Сентября 2005, 16:43:19
Цитировать
О кол-ве палочек можно судить по уровню текущего узла (level)


Это то понятно. Но ведь может быть так, что кроме палочек в ряду, будут и пробелы. Тут надо какой-то алгоритм. Наверное ведь кто-то уже сталуивался с такой проблемой!
Название: Карта сайта на Nested sets ?
Отправлено: Daiz13 от 17 Сентября 2005, 19:32:22
я по мере прохождения дерева заполняю массив $depth_markers "палочками" и "пробелами" (в моем случае вариантов больше так как я раскрываю только отдельные ветки дерева). Каждый из еллементов массива содержит маркер (пробел или палочку) родителя соответствующего уровня.
[|] [|] [--] Сын 1
 а чтобы определить, какой именно маркер ставить вполне достаточно знать level, right_key, left_key текущего узла и его родителя.

[OFF]до чего народ ленивый пошел... почти месяц ждать ответа на форуме вместо того чтобы самому подумать и написать...[/OFF]
Название: Карта сайта на Nested sets ?
Отправлено: slash2k от 17 Сентября 2005, 19:51:37
А можно код?:)