Организация многоуровневой структуры сайта (tree, mod_rewrite)

Yurik

/dev/null
Все ж таки приятнее 404-й...
нет уж запутанно выходит. "В данном разделе вы можете ознакомиться с такими документами и подразделами" намного понятней. Может я вручную урлу наберу (сотру), чтобы подняться наверх, а там видишь 404. кроме того
home >> about >> history
смотрится лучше чем
home >> about >> history
 

Yamamoto

Guest
Автор оригинала: Silex
2 Yamamoto

Ну, Кнут бы тебя тоже по головке не погладил :) Ты часто меняешь алиасы своих разделов? Я уже приводил пример, сколько запросв потребуется для этого, при условии, что хранишь дерево по алгоритму Nested Sets, а не по принципу "ребенок хранит айди родителя". А ты шерстишь ВСЮ базу. Потом еще и ассоциативный массив с ключами любой длины в общем случае... Опять-таки, учитывая скорость РНР и базы, это может и не сказывается, но все-таки...
Да все так, я гружу всегда всю базу.
Да, я знаю не есть хорошо, но -
Я это делаю одним запросом,
1 запрос и у меня дерево всего сайта.

Зачем мне это надо:

1. Чтобы показывать меню и подменю любого уровня.

2. Чтобы вывести строчку типа
Главная->О компании->Контакты->Карта
(знаете зачем она, чтобы человек не потерялся)

3. Чтобы мой cms не парился с запросами:)

т.е. 1 запрос и все, все данные уже в скрипте,
дальше парится php, а мускул пошел на перекур
и про него можно забыть:)

Конечно запросы еще потом необходимы, например,
для загрузки нужного контента, но это уже другая история.

Еще раз, я не говорю, что мой вариант идеален,
почва для мысли еще есть:)
Спасибо за заметки!
 

Dimson:)

Guest
При проектировании своей системы управления долго думал по этому поводу. Пришел к выводу что самая выгодная схема: /dir1/dir2/dir3/ -> idPage в таблице с деревом сайта. Запариваться с количеством запросов при выводе навигационных панелей, навигационных путей не стал, а сделал упор на простоту кода, плюс прикрутил кэширование. А грузить все дерево сайта только ради того чтобы было меньше запросов? Думаю, что грамотно сделаный кэш в состоянии поднять производительность гораздо лучше :) Среднее время отдачи Апачем страницы(смотрел в своем ноуте, винт 4200rpm, win98, т.е. Апачу совсем плохо в такой среде) 0,005c., т.е. 200 страниц в секунду. После этого понял, что не ошибся в своей схеме. Надеюсь, что мое выступление для кого-то окажется полезным.
 

Yurik

/dev/null
Среднее время отдачи Апачем страницы(смотрел в своем ноуте, винт 4200rpm, win98, т.е. Апачу совсем плохо в такой среде) 0,005c., т.е. 200 страниц в секунду
протестируй утилитой ab (в никсах) и твоего оптимизму поубавится


самая выгодная схема: /dir1/dir2/dir3/ -> idPage в таблице с деревом сайта
это я так понимаю отдельная таблица, которая периодически перекешируется?
 

Dimson:)

Guest
Автор оригинала: Yurik
протестируй утилитой ab (в никсах) и твоего оптимизму поубавится



это я так понимаю отдельная таблица, которая периодически перекешируется?
В юниксах сейчас нет возможности тесты делать. Само собой проверю.
Да, это отдельная таблица.
 

Tronyх

Новичок
> и хранить в нем строку /level1/level2/level3/
А что если я захочу папку из третьего уровня перенести на первый уровень или просто переименую? Перегенерировать одно поле во всей таблице?

Я делаю так:
SELECT * FROM tree WHERE (alias='level1' and level=0) or alias='level2' or alias='level3'
Потом сортирую и проверяю вложенность папок. У этого способа есть один большой ПЛЮС - я могу сделать наследуемость каких-нибудь свойств или переменных, т.е. если для первого уровня указан шаблон номер 1, а для третьего ничего не указано, то я буду использовать этот шаблон.
 

Dimson:)

Guest
Автор оригинала: Tronyх
> и хранить в нем строку /level1/level2/level3/
А что если я захочу папку из третьего уровня перенести на первый уровень или просто переименую? Перегенерировать одно поле во всей таблице?
У тебя часто происходят такие изменения? Я пишу систему для себя и этот момент конечно же учитывал. С моей точки зрения логичнее сделать более тяжелую процедуру при изменении ветки сайта и максимально облегченную фронтальную часть, которая выдает страницы клиентам.

А по поводу наследования свойств по ветке, в таблице со структурой сайта есть поле, в котором указана принадлежность к одной из корневых ветвей. Так что сдесь тоже проблем особых нет.

Эх, пораньше бы мне с вами пообщаться надо было, когда проектировал. Я никогда не занимался подобными вещами, пришлось грызть все в одиночку и с нуля.
 
Сверху