EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Организация ЧПУ в cms

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Организация ЧПУ в cms
Автор Сообщение
Pr0ks
Пол-пирога
Пол-пирога


Зарегистрирован: 02.06.2007
Сообщения: 74

3464 Монеты

СообщениеДобавлено: Вс, 23 Ноя, 2008 11:48    Заголовок сообщения: Организация ЧПУ в cms Ответить с цитатой

Нужен совет по организации работы с ЧПУ в cms. Так как ЧПУ нужен для всех плагинов, многие которые только в задумке и неизвестно когда будут реализованы, а при установке править htaccess добавляя пару новых правил для mod_rewrite крайне неудобно, решил сделать так.. (в голову ничего лучше не пришло по крайней мере).

Все шаблоны хранятся в БД. Средствами mod_rewrite скрипту через GET передается url, который запросил пользователь.
Далее он прогоняется на совпадение с шаблонами (preg_match), и, в случае, если шаблон подошел, вызывается модуль, который указан в БД для данного шаблона.

Случайных совпадений не будет, благодаря структуре Бд.

Но вызвать модуль мало, нужно в него как-то еще передать данные.. Поэтому решил добавить дополнительно поле replacement.. Которое собственно используется для постройки строки (preg_replace), которая впоследующем будет разбиваться на массив и "скармливаться" модулю.

Чтобы не быть голословным, приведу пример:

url: news/description/123.html
pattern: news\/description\/(\d+)\.html
replacement: action=description|id=\\1

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

ЗЫ Чуть не забыл, мне этот вариант нравится тем, что можно легко прописать "алиас" для страницы..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вс, 23 Ноя, 2008 13:18    Заголовок сообщения: Ответить с цитатой

По моему слишком хитрый метод не проще так первый каталог это название модуля, остальные каталоги и названия страниц переводить в параметры модуля и все. Для оптимизации все настройки модулей и параметров лучше хранить в массиве создаваемом средствами php (без БД), иначе получается что вы сначала выкачиваете все шаблоны с БД, потом проходите цикл и делаете кучу регулярных выражений.
Т.е. примерно так (упрощенно)
переводим каталоги в параметры d0,d1, d2 ..., страницу в параметр p1
получаем строку вызова функции модуля с параметрами:

function getPrmModue(){
$array['news']='runModuleNews($_GET["d1"], $_GET["d2"], $_GET["p1"]);';
$array['article']='runModuleArticle($_GET["d1"], $_GET["p1"]);';
$array['photo']='runModulePhoto($_GET["d1"],$_GET["d2"],$_GET["d3"], $_GET["p1"])';
return $array[$_GET['d0']];
}

P.S. Если нужно ну очень много параметров можно дополнительно делить параметры с помощью - методами modRewrite.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET