powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php]Нароутить роутер
5 сообщений из 5, страница 1 из 1
[php]Нароутить роутер
    #38184886
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро!

Вопрос по обработке ЧПУ.

Есть УРЛ вида /section/subsection/page/param1/param2

количество секций неограничено, параметров тоже.

т.е. фактически:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
Array
        (
            [0] => section
            [1] => subsection
            [2] => page
            [3] => param1
            [4] => param2
        )



в БД таблица page имеет поля [id] [parent_id] ...

Были варианты:
1) Выбирать из БД перебирая этот массив, пока мускул не вернёт пустой результат (т.е. страница была до этого,а теперь и дальше - параметры). - много запросов
2) Хранить урл целиком, использую полнотекстовый поиск. (совсем некрасиво)

Как быть? Как бы вы решили такую заковыку?

PS:
использовать id в урл не хочу.
использовать 1000 else if тоже ;)
...
Рейтинг: 0 / 0
[php]Нароутить роутер
    #38184895
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле идея генерировать автоматически файл для роутинга как у автора if / else имеет право на жизнь с некоторыми оговорками, одной из которых является та, что делать сопоставления нужно явно не толпой IF'ов

кстати в вашем варианте №2 гораздо быстрее, с одной оговоркой: полнотекстовый поиск не нужен, достаточно индекса по строковому полю, т.к. сопоставление будет идти на точное совпадение.

А вообще посмотрите как это организовано в фреймворках тот же зенд или симфони
...
Рейтинг: 0 / 0
[php]Нароутить роутер
    #38184896
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalamfur,

можно сделать круче, в базу в поле url страницы писать:

/news/:news_category/:year/:month/:day/

вызывать составление регулярки для этого шаблона и на выходе в контроллере получать в GET массив уже готовые значения, например, для урл:

/news/cinema/2013/03/15/

получишь GET:

Код: php
1.
2.
3.
4.
$_GET['news_category'] = "cinema";
$_GET['year'] = "2013";
$_GET['month'] = "03";
$_GET['day'] = "15";



самый наглядный и простой вариант - это роутер от http://www.mzz.ru/en/download
...
Рейтинг: 0 / 0
[php]Нароутить роутер
    #38185145
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обязательно просмотрю как это делается в симфони и зенде. Просто как водится в пятницу работы поднакинули.
Герой дня , либо я ничего не понял(скорее так), либо ..
Т.е. мне надо иметь поля с датами, секциями, подсекциями (вложенность которых варьируется)?
Anjey aka PM , т.е. второй вариант оптимален? Или вы бы его не стали пользовать?)
...
Рейтинг: 0 / 0
[php]Нароутить роутер
    #38185355
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalamfur,

все зависит от задачи и от нагрузки на самом деле
В любом случае второй вариант если использовать, то как надстройку над стандартными схемами роутинга типа module/controller/action/param_1/value_1/...../param_n/value_n

Однако не стоит забывать что не всегда оптимально дергать базу данных каждый раз для роутинга
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php]Нароутить роутер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]