iGrog
(Laritari)
1
Есть контроллер GoodsController.
Хочу делать красивые урлы в зависимости от категории товара.
Например:
$this->createUrl('goods/view', array('name' => 'Алиса_в_стране_чудес',
'entity' => Entities::Book));
давало бы: site.com/books/Алиса_в_стране_чудес
а
$this->createUrl('goods/view', array('name' => 'Титаник',
'entity' => Entities::Video));
давало бы: site.com/video/Титаник
Как надо настроить UrlManager?
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'urlSuffix' => '/',
'rules' => array(
'books/<name:.+>' => 'goods/view'
'video/<name:.+>' => 'goods/view',
),
),
Понятно, что это не работает. Вопрос в том, что тут надо написать, что бы генерировались правильные урлы.
Т.е. даже два вопроса:
-
Что бы createUrl в зависимости от параметра entity давал бы соответствующий Url
-
Что бы в контроллере goods/view можно было узнать этот entity
andy_s
(Arekandrei)
2
Почему бы не обойтись в таком случае одном правилом?
'<entity:(books|video)>/<name:.+>' => 'goods/view'
// или так, если категорий уж очень много.
'<entity:\w+>/<name:.+>' => 'goods/view'
А уже в контроллере свитчем определять категорию.
napeHeK
(Napehek)
3
[font="Courier New"]
'<entity:(books|video)>/<name>' => 'goods/view'
$entity = $_GET['entity'];
$name = $_GET['name']
[/font]
napeHeK
(Napehek)
4
[font="Courier New"]И необязательно ставить прочерки вместо пробелов, если ваша кодировка utf-8.
$this->createUtl(‘post/tas’, array(‘tag’ => ‘Основы скриптинга AMX’)) даст ссылку[/font] …
/tag/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+AMX
[font="Courier New"]В строке браузера[/font]
/tag/Основы%20скриптинга%20AMX
Работает с русскими УРЛ
Посмотрите плиз — может подскажете?
napeHeK
(Napehek)
6
Честно не знаю. Делал статьи…делал теги. Все работало, как надо.
Не забывай об оптимизации…зачем тебе сдесь регулярка…
'tags/<title>' => 'tags/view',
$this->createUtl('tags/view', array('title' => 'Основы скриптинга AMX'))
public function actionView()
{
$title = $_GET['title'];
}