Изменить URL в пагинации

всем привет

могу ли я изменить УРЛы в пагинации к zii.widgets.grid.CGridView ?

переношу админку в модуль и застопорился на пагинаторе…

сейчас ссылка выглядит так = http://site.ru/adm_news/admin/?News_page=2

а надо чтобы было так = http://site.ru/adm/adm_news/admin/?News_page=2

первое, что пришло в голову - клонировать и допилить ClinkPager

который будет находиться в данном модуле

вот допиливание =


public $btnClass = 'btn btn-default';

public $module_name = '';

public $page_param = '';


protected function createPageButton($label,$page,$class,$hidden,$selected)

{

    if($hidden || $selected)

    {

        $class.=' '.($hidden ? $this->hiddenPageCssClass : 'btn-danger');

        $style.=' '.($hidden ? 'display: hidden;' : '');                

    }

    return CHtml::link(

            $label,

            $this->myUrl($page),

            # $this->createPageUrl($page), // оригинальный метод класса

            array(

                'class'=>$this->btnClass.' '.$class,

                'role'=>'button',

                'style'=>$style,

                ));

}


protected function myUrl ($page) 

{

    $obj = Yii::app()->controller;

    $arr = array();

    $page = $page + 1; // номер страницы

    if ($page === 1) 

    {

        $arr = array("{$this->module_name}/{$obj->id}/{$obj->action->id}");

    }

    else 

    {

        $arr = array("{$this->module_name}/{$obj->id}/{$obj->action->id}",

                "{$this->page_param}"=>$page);

    }

    return $arr;

}

вот использование =


'pager' => array(

    'firstPageLabel'=>'<<',

    'prevPageLabel'=>'<',

    'nextPageLabel'=>'>',

    'lastPageLabel'=>'>>',

    'maxButtonCount'=>'10',

    'header'=>false,

    'class'=>'application.modules.adm.components.MyCLinkPager',

    'btnClass'=>'btn btn-default btn-sm',

    'module_name'=>'adm',

    'page_param'=>'News_page',

),

оказалось, что проблему можно решить гораздо проще и изящнее :D

нужно в классе модуля в методе инит указать Yii::app()->urlManager->baseUrl


public function init()

{

    Yii::app()->assetManager->baseUrl = '/assets/';

    Yii::app()->urlManager->baseUrl = 'http://site.ru/adm';

    // import the module-level models and components

    $this->setImport(array(

            'adm.models.*',

            'adm.components.*',

    ));

}

1 Like