Silex
unitecsys
Организация многоуровневой структуры сайта (tree, mod_rewrite)
Возникла необходимость организовать многоуровневую структуру сайта с неограниченным числом уровней вложенности. С хранением проблем не возникло - phpDBTree (http://dev.e-taller.net/dbtree/).
Основной вопрос - как организовать формирование и обработку ссылок? Пока что пришел к тому, чтобы в записи в отдельном поле хранить алиасы - имена виртуальных папок. Алиасы уникальны только в пределах детей одного родителя. При помощи mod_rewrite управление передается на скрипт, который explode'ом по '/' загоняет переданный URL вида www.example.org/level1/level2/levelN/ в массив (или каким-либо другим образом), и затем уже с конца массива начинает делать выборку по алиасу из базы. Поскольку алиасы не уникальны, могут быть коллизии. В этом случае проверяется родитель, и так пока не будет получена однозначность. Ну, дальше уже с записью что угодно можно делать, зная ее уникальный id.
Естественно, предложенный алгоритм, мягко говоря, нехороший, и сводит на нет все преимущество хранения деревьев по алгоритму Nested Sets. Запросы, запросы...
Основная загвоздка - в неуникальности алиасов. Как вариант рассматривалось динамическое формирование Rewrite Rules со связкой "полный УРЛ" <=> "передача однозначного id в скрипт" при добавлении нового раздела, но это ж тоже ужас.
Есть соображения по этому поводу?
Возникла необходимость организовать многоуровневую структуру сайта с неограниченным числом уровней вложенности. С хранением проблем не возникло - phpDBTree (http://dev.e-taller.net/dbtree/).
Основной вопрос - как организовать формирование и обработку ссылок? Пока что пришел к тому, чтобы в записи в отдельном поле хранить алиасы - имена виртуальных папок. Алиасы уникальны только в пределах детей одного родителя. При помощи mod_rewrite управление передается на скрипт, который explode'ом по '/' загоняет переданный URL вида www.example.org/level1/level2/levelN/ в массив (или каким-либо другим образом), и затем уже с конца массива начинает делать выборку по алиасу из базы. Поскольку алиасы не уникальны, могут быть коллизии. В этом случае проверяется родитель, и так пока не будет получена однозначность. Ну, дальше уже с записью что угодно можно делать, зная ее уникальный id.
Естественно, предложенный алгоритм, мягко говоря, нехороший, и сводит на нет все преимущество хранения деревьев по алгоритму Nested Sets. Запросы, запросы...
Основная загвоздка - в неуникальности алиасов. Как вариант рассматривалось динамическое формирование Rewrite Rules со связкой "полный УРЛ" <=> "передача однозначного id в скрипт" при добавлении нового раздела, но это ж тоже ужас.
Есть соображения по этому поводу?