Yii Framework Forum: Настройка Чпу - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Настройка Чпу не работает Rate Topic: ***** 1 Votes

#1 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 01:22 AM

Доброе утро всем, эт снова я :D Помогите пожалуйста настроить ЧПУ. За основу взял yiiframework.com/extension/seo/, там первый абзац - SeoRecordBehavior. Все подключил вроде как нужно, но прикол в том что оно не работает, вообще.... Т.е. никаких ошибок не выдает, но и ссылки вообще не меняются :blink:
По остальным пунктам настроил, а с этими ссылками гребаными никак. Modrewrite включен, серв настроен, т.е. изначально ЧПУ настроены, но сейчас они имеют вид site.ru/film/4.html, а хочется по чулавечески чтоб было, вроде этого -site.ru/film/Сайлент Хилл 2.html - к примеру. Очень надеюсь на вашу помощь, спасибо :(
0

#2 User is offline   Charger 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 191
  • Joined: 03-September 11

Posted 01 February 2013 - 07:46 AM

Сразу оговорюсь что с этим модулем работать не приходилось.
Он точно обещает изменять ссылки? А как вы эти ссылки генерируете, через $this->createURL()?
А если вбить в браузер site.ru/film/Сайлент Хилл 2.html то получается 404 или идет правильный редирект action?
1

#3 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 09:15 AM

Спасибо что откликнулись, а то я уж думал на этом форуме вообще живых нет :)

http://localhost/film/Сайлент Хилл 2.html - пишет

Error 404

Системе не удалось найти запрашиваемое действие "СайлентХилл2".

http://localhost/fil...йлентХилл2.html - тоже самое. По идеи да, я не со всем уверен, но насколько я понял он вытаскивает название(в моем случае) из БД, а затем подставляет в url, точнее должен подставить. Но интерестно то что вообще ничего не происходит, ошибок нет, но и не работает, вообщем странно это :unsure:

Делаю так:
Прописываю в модели film (Заменил name на title, т.к. насколько я понял это столбцы БД, id, title - id и заголовок новости соответственно в моей таблице)
public function behaviors()
{
    return array(
        array(
            'class'=>'application.components.SeoRecordBehavior',
            'route'=>'model/view',
            'params'=>array('id'=>$this->id, 'name'=>$this->title),  
    );
}


Затем в UrlManager, файле main.php добавляю правило для ссылок

'model/<id:\d+>-<name>.html'=>'model/view',


Так, я понял, сорри за мою тупость,
$model->getUrl(array('foo'=>'bar')
нужно прописать в view.php, правильно ? Только вот я так понимаю значения foo, bar нужно на свои сменить, а вот на какие :blink: , буду благодарен, если подскажите :)

Вот только не пойму как вам репутацию поднять :)
0

#4 User is offline   Charger 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 191
  • Joined: 03-September 11

Posted 01 February 2013 - 10:58 AM

Вы должны понимать что у ЧПУ как минимум две составляющие. Первая- трансляция адресной строки в имя контроллера и экшена, этим занимается UrlManager и правило
'model/<id:\d+>-<name>.html'=>'model/view' 
означает, что адрес /model/23-Silent+hill.html будет направлена в контроллер model действие view. Вам наверное будет правильнее написать правило:
'film/<id:\d+>-<name>.html'=>'film/view' 
и проверить в браузере ссылку /film/23-Silent+hill.html она не должна выдавать 404 а должна отрендерить film/view передав в него переменные $_GET['id'] (23) и $_GET['name'] (Silent hill)

Когда уже работает первый пункт, можно переходить к второму- програмной генерацией ссылок.
$model->getUrl(array('foo'=>'bar')
этот метод уже передает переменную id- берет её из модели, а вместо 'foo'=>'bar' вам наверное надо 'name'=>$model->title
1

#5 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 11:10 AM

Спасибо вам большое, сейчас обязательно попробую это сделать :)
0

#6 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 12:57 PM

Значит докладываю. В файле main.php прописал как вы и говорили:

'urlManager'=>array(
			'urlFormat'=>'path',
			'showScriptName'=>false,
           // 'urlSuffix'=>'.html',
			'rules'=>array(
				'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
				'film/<id:\d+>-<name>.html'=>'film/view', // Добавил правило как вы говорили
			),
		),


Затем в модели film.php прописал:
public function behaviors()
{
    return array(
        array(
            'class'=>'application.components.SeoRecordBehavior',
            'route'=>'film/view',
            'params'=>array('id'=>$this->id, 'name'=>$this->title),
        ),
    );
}


Ну и прописал в /views/film/view.php
$model->getUrl(array('name'=>$model->title));


Только ссылка это как вкопанная там так и висит
http://localhost/film/4


Проверил, как вы и говорили

Quote


- вбиваем в строке браузера запрос обрабатывается корректно, т.е. все работает, если же перейти по ссылки с главной страницы, опять получаем
http://localhost/film/4


Я так пологаю здесь где-то ошибка, но что поправить не знаю, уже все перепробовал, как только можно

$model->getUrl(array('name'=>$model->title));

0

#7 User is offline   Charger 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 191
  • Joined: 03-September 11

Posted 01 February 2013 - 01:05 PM

А попробуйте разместить правило 'film/<id:\d+>...' самым первым, перед '<controller:\w+>/<id:\d+>'=>'<controller>/view'
0

#8 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 01:52 PM

Тажа петрушка. Чет прям заколдованные ссылки эти :(
0

#9 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 01 February 2013 - 04:00 PM

Вообщем не знаю насколько это верно, но. Убрав из view.php
$model->getUrl(array('name'=>$model->title));


И переделав заголовок в файле _view.php следующим образом
<a href="<? echo $data->getUrl(array('name'=>$data->title)); ?>"><?php echo $data->title ?></a>


Я получил то что хотел. На оригинальность, правильность не претендую, возможно мои мучения были не напрасны, и кому либо это пригодится. Все же хотел бы услышать что думаете вы по этому поводу, насколько это правильно/неправильно :blink:

ОГРОМНОЕ СПАСИБО Charger за помощь в оживлении данного расширения. Я спать...
0

#10 User is offline   Charger 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 191
  • Joined: 03-September 11

Posted 02 February 2013 - 06:47 AM

Неясно. Лениво настраивать тестовый проект.
Может стукните мне в скайп или асю (в профиле указаны) и через TeamViewer вместе подебажим.
0

#11 User is offline   melomaniac 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 22
  • Joined: 14-January 13

Posted 02 February 2013 - 08:43 AM

Добрый вечер, ок, добавил в скайп :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users