mod_rewrite и деревья с бесконечным уровнем вложений

que_bunt

Новичок
mod_rewrite и деревья с бесконечным уровнем вложений

здраствуйте.
при работе з деревьями самым простым способом открыть(например) ветку является передача его id,
тоесть например "index.php?cat=3"

как же поступить если надо сделать в проекте ЧПУ ?
например для такой структуры:
Код:
О компании
	Новости
		Архив
			2005
			2006
передать id в ссылке похоже не получится
единственное что я придумал это:
формировать ссылку типа www.site.ru/company/news/archiv/2006/ а mod_rewrite переделывает ее как www.site.ru/index.php?cat=2006
тоесть вместо id в таблице делаем ещо одно уникальное поле, с названием разделов типа: company, news, archiv, 2005, 2006, about, products и так дальше, тогда несмотря на уровень вложонности мы просто берем последний уровень и по нем берем инфу из базы.
но тут есть один большой минус, сделать так вот не получится:
site.ru/groups/news/ и site.ru/company/news/ так как два роздела имеют одинаковые названия.

возможно я страшно туплю, поэтому и прошу помочь.
в поиск смотрел, ничего похожего вроде нет, хотя топиков про mod_rewrite немаленькая туча.

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

Фанат

oncle terrible
Команда форума
а почему мод реврайт переделывает её в cat=2006, а не в cat=company/news/archiv/2006/ ?!
 

que_bunt

Новичок
ну тогда по моей логике в скрипте вместо прежнего "WHERE id=GET['cat']" будет "WHERE name=GET['cat']"

но насколько я понимаю ты намекаеш на то чтобы получать в скрипте переменную cat=company/news/archiv/2006/ и уже ее разбирать на части? это лучшый вариант для даной ситуации?
 

Фанат

oncle terrible
Команда форума
не, ну если ты хочешь разбирать бесконечную вложенность мод-реврайтом - я не против =)
 

que_bunt

Новичок
понятно. спасибо.
но вобщето мне тогда хватит например в даном случаем только два уровня чтобы выбрать нужную категорию:
Код:
WHERE name=2006  AND parent_name=archiv
?

-~{}~ 12.04.06 00:41:

а теперь ещо появляется одно дополнительное поле parent_name...
 

zerkms

TDD infected
Команда форума
que_bunt
ты уверен что у тебя в БД хранится именно дерево?
 

que_bunt

Новичок
да.
вот начальная структура:
| id | parent_id | ru_name |

теперь надо добавить ещо | name | parent_name |
и делать так как сказал Фанат

я правильно сделаю, если пойду этим путем?
или я неправильно понял Фаната?
 

tolst

Новичок
у меня это реализованно так:

$browse = $_GET['bla bla bla'];

| id | puth | content[... |]

WHERE puth=$browse
 

que_bunt

Новичок
у меня ещо вопрос по этой теме:

как тогда мне можно организовать обработку ошыбки 404?

ErrorDocument 404 /handler404.php

а в handler404.php смотреть в базе нет ли записи с "path=company/news/archiv/2006/", если есть то отдать "HTTP/1.1: 200 OK" если нет то "HTTP/1.0 404 Not Found" + свою информацию, если хочу.

правильно?
 

Фанат

oncle terrible
Команда форума
не стоит использовать обработку ошибки 404 не по назначению
 

que_bunt

Новичок
в документ. к чему?
кинь линк пожалуста.

просто в 17 номере PHPInside приблизительно так и описывалась обработка 404.
 

Фанат

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

que_bunt

Новичок
вроде ясно.

Автор оригинала: Фанат
не надо верить всему, что тебе напишут в инсайд.
а чему тогда верить, кроме документации?
а там ведь алгоритмы не пишут, а сам не всегда придумаеш...
 

que_bunt

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

kruglov

Новичок
que_bunt
Обрабатывать ошибку 404 можно не только через ErrorDocument, но и через проверку существования запрошенного файла тем же mod_rewrite.

> а если человеку обязательно нужно организовать обработку ошыбки 404, для дипломной
Хотите, чтобы мы "человека" поуговаривали? Да пускай делает, нам-то что?
 

que_bunt

Новичок
Автор оригинала: kruglov
Обрабатывать ошибку 404 можно не только через ErrorDocument, но и через проверку существования запрошенного файла тем же mod_rewrite.
да, но я же тут не могу делать проверку существования запрошенного файла, ведь для того чтобы знать есть ли даные по запрошеной странице надо надо посмотреть в базу есть ли запись с полем path='company/news/archiv/'
и если нет то тогда выдать ошыбку 404.
я ведь не проверяю реальные файлы, а то что в базе. поетому и спрашываю правильно ли так будет сделать.

> а если человеку обязательно нужно организовать обработку ошыбки 404, для дипломной
Хотите, чтобы мы "человека" поуговаривали? Да пускай делает, нам-то что?
естественно никого уговаривать не надо, просто если надо куда-нить втулить эту обработку 404 то можна так как я написал? или это вобще не годится.
 
Сверху