Не Могу Настроить Роутер В Пагинации.

Хотел бы узнать, как правильно сделать нужный мне роутинг в пагинации.

Если ничего не изменять, то все работает правильно, но мне хочется сделать красивый адрес.

Правила:




            'rules'=>array(

                '<controller:blacklist>/<type:renters|lessors>' => '<controller>/list/type/<type>',

                '<controller:blacklist>/<type:renters|lessors>/page/<page:\d+>' => '<controller>/list/type/<type>/page/<page>',

            ),



Контроллер:




    public function actionList($type='renters')

    {

        $types_id = ($type=='renters') ? BlackList::TYPE_RENTER : BlackList::TYPE_LESSOR;


        $criteria=new CDbCriteria();

        $criteria->addSearchCondition('types_id', $types_id, false);


        if(isset($_GET['search']))

        {

            $criteria = BlackList::model()->getDbCriteria()

                ->addSearchCondition('person_name', '%'.$_GET['search'].'%', false)

                ->addSearchCondition('types_id', $types_id, false);

        }


        $count = BlackList::model()->count($criteria);


        $pages=new CPagination($count);

        $pages->pageSize=3;

        $pages->applyLimit($criteria);

        $pages->route = $type;

        $pages->params = array();


        $items = BlackList::model()->findAll($criteria);


        $this->render($type.'-list', array(

            'type' => $type,

            'items' => $items,

            'pages' => $pages

        ));

    }



Сейчас вывод работает по ссылке:

/blacklist/lessors.html

/blacklist/renters.html

При пагинации так:

/blacklist/lessors/page/1.html

/blacklist/renters/page/1.html

Но там на странице есть еще поле, где можно указать критерий для поиска ($_GET[‘search’]).

И когда я его использую, то адрес становится таким:

/blacklist/lessors.html?search=запрос

Информация выводится с учетом этого критерия, все работает правильно, но ссылке на пагинацию выводятся прежние:

/blacklist/lessors/page/1.html

а нужно такие:

/blacklist/lessors/page/1.html?serach=запрос

Понимаю, что дело состоит в:




        $pages->route = $type;

        $pages->params = array();



Что можете сказать? Возможно не очень понятно объяснил, просто спешил.




            'rules'=>array(

                  'blacklist/<type:renters|lessors>/page/<page:\d+>' => 'blacklist/list',                

                  'blacklist/<type:renters|lessors>' => 'blacklist/list',

                

            ),



Путь правила (у вас ‘<controller>/list/type/<type>’ нужно ‘blacklist/list’ ну или ‘<controller>/list’) должен указывать на существующий путь контроллера. при парсинге запроса система сама передаст все необходимые параметры в запрос не над формировать ссылку которая должна по идее существовать!

Еще при составлении правил важен порядок система всегда ишет первое удачное совпадение поэтому я поставил правило ‘blacklist/<type:renters|lessors>/page/<page:\d+>’ => ‘blacklist/list’, в начало списка

Почитай стастью Управление URL всё встанет ясно

Благодарю, не прочитал внятно статью про роуты, теперь все ясно.