(решено) Как делать роутинг?
Добавлено: 2015.10.07, 18:10
Переношу сайт-каталог на Yii2. Одно из требований - сохранение всех URL.
Есть два уровня категорий
/programms
/computers/notebook
И в вхождения в них (скажем, товары):
/programms/123
/computers/notebook/1234
При чем товар может входить в несколько категорий, но его URL генерируется по одной из них (в many-to-many таблице категория-товар есть третья колона - main. Там 1 для одной главной категории и 0 для остальных).
Попробовал сделать:
1) В actionView категории передаются slug'и родительской категории и подкатегории.
2) В actionView товара передаются slug'и родительской категории и подкатегории и ID товара в конце.
Но когда я вывожу список товаров из какой-то подкатегории (скажем, 20 штук на странице), для генерации ссылки на товар приходится запрашивать его категорию (у которой main = 1), и дополнительно ее родителя, если она не корневая.
Т.е. на каждую ссылку на товар - 2 SQL запроса, что не есть хорошо.
Кто как выходил из такой ситуации?
Вижу один вариант - банально закешировать страницы, но не для этого я пробую перейти с drupal на yii
Есть два уровня категорий
/programms
/computers/notebook
И в вхождения в них (скажем, товары):
/programms/123
/computers/notebook/1234
При чем товар может входить в несколько категорий, но его URL генерируется по одной из них (в many-to-many таблице категория-товар есть третья колона - main. Там 1 для одной главной категории и 0 для остальных).
Попробовал сделать:
1) В actionView категории передаются slug'и родительской категории и подкатегории.
2) В actionView товара передаются slug'и родительской категории и подкатегории и ID товара в конце.
Код: Выделить всё
'cat/<categorySlug:[\w_-]+>/<subcategorySlug:[\w_-]+>/<id:\d+>' => 'photo-item/view',
'cat/<categorySlug:[\w_-]+>/<id:\d+>' => 'photo-item/view',
'cat/<category:[\w_-]+>/<subcategory:[\w_-]+>' => 'photo-category/view-by-slug',
'cat/<category:[\w_-]+>' => 'photo-category/view-by-slug',
Т.е. на каждую ссылку на товар - 2 SQL запроса, что не есть хорошо.
Кто как выходил из такой ситуации?
Вижу один вариант - банально закешировать страницы, но не для этого я пробую перейти с drupal на yii