Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Универсальный роутинг http://forum.kohanaframework.su/viewtopic.php?f=32&t=312 |
Страница 1 из 1 |
Автор: | eBasher [ 12 авг 2012, 22:14 ] |
Заголовок сообщения: | Универсальный роутинг |
Добрый день всем. Озадачился я намедни написанием небольшой цмс-ки и вот возник затык с роутами, как лучше сделать. Поскольку изначально неизвестно, какие адреса у нас будут, написание роута под каждый случай отметается. Как вариант, все сплавлять на один контроллер (нашел в тырнете): Код:
Далее там по path ищем в базе, есть ли такой адрес. Вот тут не знаю, каким образом это сделать. К каждой статье приписывать uri, по которому ее можно найти и к каждой категории тоже. Искать сначала по статьям, если есть - обрабатывать контроллером статей, если нету - искать по категориям. Как это все туповато. Вот на хабре накопал статью: http://habrahabr.ru/post/47941/ и как назло на самом нужном месте она обрывается Цитата: А теперь создайте файл routes.php и пропишите в нем Пытался на глиз разобраться, как работает, но не особо понял. |
Автор: | Sergey [ 12 авг 2012, 22:47 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Маршрутизация: Код:
Контролёр: Код:
Вид: Код:
Модель: Код:
SQL: Код:
|
Автор: | eBasher [ 12 авг 2012, 23:13 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Да это все понятно. Мне не это надо. Допустим site.ru/cars выдает список машин, а site.ru/cars/daewoo-matiz выдает уже конкретную машину. Поэтому я и говорю, что в базе забивать для daewoo-matiz адрес cars/daewoo-matiz. И потом что-то вроде Код:
Для категорий аналогично, только ищем в другой таблице и контроллер другой. Оно как бы и работает, но как-то не то. PS В вашем роуте '(<controller>(/<page>(/<action>)))' action не нужен. В него все равно ничего не попадет. |
Автор: | eBasher [ 12 авг 2012, 23:35 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Еще как вариант - написать регулярку, которая будет получать последнюю часть uri (т.е. то, что находится после последнего слеша) и по нему уже тогда можно искать в базе alt_name (обычно транслитное название статьи или категории). Тогда отдельное поле не понадобится. |
Автор: | Sergey [ 12 авг 2012, 23:35 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
eBasher писал(а): Да это все понятно. Мне не это надо. Допустим site.ru/cars выдает список машин, а site.ru/cars/daewoo-matiz выдает уже конкретную машину. Не изобретайте велосипед. cars в данном случае контролёр, который будет работать с моделью cars в в action_index проверяйте $name (который в данном примере будет daewoo-matiz) и выбирайте из бд Роут будет примерно такой: '(<controller>(/<name>))' eBasher писал(а): PS В вашем роуте '(<controller>(/<page>(/<action>)))' action не нужен. В него все равно ничего не попадет. Ну это всего лишь заготовка |
Автор: | eBasher [ 12 авг 2012, 23:42 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Мне не нужно, чтобы cars был контроллером. Мне нужно, чтобы все статьи обрабатывал контроллер articles, а все категории обрабатывал контроллер categories. Взглянул сейчас на дле и вордпресс. Можно из дле содрать. Все, что оканчивается на .html - считать статьей. Остальное -это категории (с постраничкой и без, причем постраничка определяется по куску /page/). Соответственно пишем два роута и все. |
Автор: | AmberLEX [ 13 авг 2012, 00:40 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Я в одном контроллере content делал 3 экшена Код:
Т.е. если просто <slug>, то работает экшн static http://mysite/about, http://mysite/help - статические страницы Если есть экшн (category или page) http://mysite/category/category-name - категория (тут можно показывать статьи этой категории или подкатегории или и то и то) http://mysite/page/article-name - статья из категории Т.е. <slug> обязательный в любом случае, а к чему относится определяется экшеном. Если изменили название категории (slug изменился), то на url статьи это не влияет, не нужно в базе лопатить и менять ссылки Код:
Может вам подойдет Примерно такая структура url в maxsite cms сделана |
Автор: | Rush64 [ 13 авг 2012, 18:32 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
ну экшн у вас по прежнему один - static, остальные параметры. параметров может быть несметное количество. в данном случае если контроллер один (!), надо в роуте просто опустить его название Код:
допустим парам1- категория, парам2 - уже статья если в строке набрать просто site.ru - вызовется контроллер articles и выведется к примеру список категорий или статьи добавить парам1 - статьи категории парам2 - статья. в экшене лишь необходима проверка парамсов. только стоит позаботится о резервации таких урлов как /login, /register и т.д. можно добавить следующим роут с указанием допустимых значений, он перезапишет этот и все. |
Автор: | Sergey [ 13 авг 2012, 19:54 ] |
Заголовок сообщения: | Re: Универсальный роутинг |
Да конечно. Говорю же, велосипед изобретает |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |