Подскажите про роутинг и Тайтл для пагинатора

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Ruganin
Сообщения: 14
Зарегистрирован: 2011.10.20, 15:25

Подскажите про роутинг и Тайтл для пагинатора

Сообщение Ruganin »

Пару вопросов появилось.
Поможите и наставьте на путь кто знает и свободен.
Вопрос 1:
Есть модель Objects с соответствующим контролером, делается обычная выборка из базы все это работает через метод List и прикручивается классический пагинатор через виджет и CLinkPager.
на выходе имею url - root/index.php?r=objects/list если иду по ссылке пагинатора то соответственно root/index.php?r=objects/list&page=2 и т.д
есть правила для urlманагера:

Код: Выделить всё

urlManager'=>array(
            'urlFormat'=>'path',            
            'rules'=>array(
                'objects_page/<page:\d+>/'=>'objects/list',
                'object/<id:\d+>/'=>'objects/view',
                 '<controller:\w+>/<id:\d+>'=>'<controller>/view',                
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),          
            'showScriptName'=>false,
        ),
соответственно на выходе получаю root/objects/list а если по пагинатору клацнуть root/objects_page/2
в конфиге objects задан как дефолтный контролер, а в самом контролере list как стартовый экшен, по этому если я иду по url root/ то все нормально, однако пагинатор то работает от objecrts/list и ему пофиг он ПЕРВУЮ страницу указывает как root/object/list а не root/, т.е. если я нахожусь на 2 странице пагинатор выдает вот это:
root/object/list <= 2 => root/objects_page/3 , а мне требуется что бы пагинатор выдал
root/ <= 2 => root/objects_page/3
Итог: я не могу составить правило действующее как 'HomeUrl'=>'objects/list'
В принципе я могу попробовать через htaccess заредиректить objects/list по 301 на корень, что бы избежать дубля, но по мне это не выход.

Вопрос 2: более прозаичен, в objects/list стандартная запись для тайтла $this->pageTitle = Yii::app()->name; однако все страницы пагинатора имеют данный тайтл.
Как сделать так что бы со 2 страницы тайтл выглядел как $this->pageTitle = Yii::app()->name . ' - страница ' . IDстраницы;

Если где то есть тексты для решения моих задач, ссылки приветствуются. Зарание спасибо за помощь.
Ruganin
Сообщения: 14
Зарегистрирован: 2011.10.20, 15:25

Re: Подскажите про роутинг и Тайтл для пагинатора

Сообщение Ruganin »

Сомневаюсь что никто не знает. Небось слишком мутно написал че хочу?
Ruganin
Сообщения: 14
Зарегистрирован: 2011.10.20, 15:25

Re: Подскажите про роутинг и Тайтл для пагинатора

Сообщение Ruganin »

Первая страница пагинатора как HomeUrl, а не post/index РЕШЕНО:
Мож кому пригодится.
Создан компонент DefaultControllerPagination.php и переопределяем createPageUrl

Код: Выделить всё

<?php
class DefaultControllerPagination extends CPagination {
    public function createPageUrl($controller,$page)
        {
                $params=$this->params===null ? $_GET : $this->params;
                if($page>0){ // page 0 is the default
                        $params[$this->pageVar]=$page+1;
                        $url = $controller->createUrl($this->route,$params);
                        }else{
                            $url = Yii::app()->homeUrl;
                            }
                            return $url;
        }
}
 
В контролере Post экшен index

Код: Выделить всё

$criteria=new CDbCriteria;
$pages=new CPagination(Post::model()->count($criteria));
//...
 
заменяем на

Код: Выделить всё

$criteria=new CDbCriteria;
$pages = new DefaultControllerPagination(Post::model()->count($criteria));
//...
 
Разумеется если вы знаете более элегантное решение, не откажите в любезности и напишите его.
Ответить