Дерево и проблемы с ветвями

kpp

Новичок
Дерево и проблемы с ветвями

Имеется следующая реализация "CMS":

Для управления страницами сайта имеется администраторский раздел. Для удобства поиска нужной страницы имеется классическая навигация в виде дерева.
Для этого имеется таблица со следующими полями:
id | parent_id | name

Для хранения самих страниц имеется вторая таблица, она хранит:
1. тело страницы( собственно контент);
2. заголовок страницы;
3. имя страницы.
Имя страницы вида "en/visitors/2007"
Это имя формируется при создании страницы. Если его не формировать, то не понятно как можно будет найти нужную страницу. (modRewrite принимает URI "/en/visitors/2007/" и формирует из него page.php?name=/en/visitors/2007/)

Проблема же заключается в следующем.
Допустим есть страница "en". Создаётся страница "visitors", которую мы сделали её потомком (её конечным именем становится "en/visitors"). Далее мы создаём ещё одну страницу "2007", она является уже потомком последней: её именем становится "en/visitors/2007". Если меняется имя какой-нибудь корневой страницы, то необходимо поменять имена всех предков. Можно ли сделать как-то по-человечески. Ведь если у страницы 1000 потомков, то придётся парсить все страницы и потом менять имена 1000 записай.
 

Фанат

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

Фанат

oncle terrible
Команда форума
Marquis
у автора, вроде, русским языком написано.
читать не пробовал?
 

kpp

Новичок
что именно ты не можешь найти?
Как найти страницу, если мне известно "/en/visitors/2007/",
но в базе не хранится конечный путь? А хранятся "страницы" знающие только о своих соседях
 

kpp

Новичок
от корня искать en, потом visitors, потом 2007?
Вы это имеете в виду HraKK?
 

Фанат

oncle terrible
Команда форума
как хочешь - так и ищи.
учитывая тот факт, что у тебя на каждой странице меню ПРИСУТСТВУЕТ - то есть, практически весь путь уже имеется, и все давно найдено , то я вообще не понимаю твоих трудностей
 

HraKK

Мудак
Команда форума
*****
Хм, а как найти без рекурсии?
Если способ хранения дерева - классика?
 

HraKK

Мудак
Команда форума
Хм. Чесно скажу я больной 39*, только приехал 3 дня не спал.
Если не затруднит напиши как. Можно в приват.
 

Фанат

oncle terrible
Команда форума
рекурсия нужна для того, чтобы построить ДЕ-РЕ-ВО
где ты здесь (/en/visitors/2007/) дерево увидел?
чтобы подняться на третий этаж по лестнице тыебе тоже рекурсия понадобится? спускаться-подниматься 10 раз будешь?
kpp
что у тебя хранится в поле parent_id? пример
 

kpp

Новичок
id | parent_id | name
1 | 0 | root
2 | 1 | name1
3 | 1 | name2
4 | 3 | name1
5 | 1 | name3

Для приведённого случая

id | parent_id | name

1 | 0 | root
2 | 1 | en
3 | 2 | visitors
4 | 3 | 2007
 

Фанат

oncle terrible
Команда форума
слава богу.
я уж боялся, что там "visitors"

ну. и какие у тебя проблемы?
 

kpp

Новичок
Теперь вроде понял.

Сначала ищу "en" , зная что он лежит в корне и у него parent_id == 1. Далее беру у него id и по нему ищу visitors (принимая за имя "visitors" и за "paren_id" id найденного "en") .. далее также 2007
 
Сверху