Добавлено: Вс, 23 Ноя, 2008 11:48 Заголовок сообщения: Организация ЧПУ в cms
Нужен совет по организации работы с ЧПУ в cms. Так как ЧПУ нужен для всех плагинов, многие которые только в задумке и неизвестно когда будут реализованы, а при установке править htaccess добавляя пару новых правил для mod_rewrite крайне неудобно, решил сделать так.. (в голову ничего лучше не пришло по крайней мере).
Все шаблоны хранятся в БД. Средствами mod_rewrite скрипту через GET передается url, который запросил пользователь.
Далее он прогоняется на совпадение с шаблонами (preg_match), и, в случае, если шаблон подошел, вызывается модуль, который указан в БД для данного шаблона.
Случайных совпадений не будет, благодаря структуре Бд.
Но вызвать модуль мало, нужно в него как-то еще передать данные.. Поэтому решил добавить дополнительно поле replacement.. Которое собственно используется для постройки строки (preg_replace), которая впоследующем будет разбиваться на массив и "скармливаться" модулю.
Собственно для чего я это все тут пишу.. Не скажу, что мне нравится это решение, поэтому прошу гуру черкнуть пару строк о том, как они относятся к такому подходу.. И, если есть идеи, предложить действия по оптимизации, или другие варианты.
ЗЫ Чуть не забыл, мне этот вариант нравится тем, что можно легко прописать "алиас" для страницы..
По моему слишком хитрый метод не проще так первый каталог это название модуля, остальные каталоги и названия страниц переводить в параметры модуля и все. Для оптимизации все настройки модулей и параметров лучше хранить в массиве создаваемом средствами php (без БД), иначе получается что вы сначала выкачиваете все шаблоны с БД, потом проходите цикл и делаете кучу регулярных выражений.
Т.е. примерно так (упрощенно)
переводим каталоги в параметры d0,d1, d2 ..., страницу в параметр p1
получаем строку вызова функции модуля с параметрами:
P.S. Если нужно ну очень много параметров можно дополнительно делить параметры с помощью - методами modRewrite. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)