user2636556
user2636556

Reputation: 1915

yii CListView relation sorting

Currently when i click on sort by in CListView generated table, it adds MODEL_NAME_2 to the url

?page=1&sort=MODEL_NAME_2.cat.desc

is there a way to remove it? or maybe rename it to something else? Or is this just how Yii works?

here is my actionIndex() in my controller

public function actionIndex()
{
    $dataProvider=new CActiveDataProvider('MODEL_NAME_1', array(
        'id'=> '', 
        'criteria' => array(
            'with' => 'MODEL_NAME_2',
            'together'=>true, //specifies whether the query should be run using a join
        ),
        'sort'=>array(
               'defaultOrder'=>'MODEL_NAME_2.cat ASC',
                'attributes'=>array(
                    'MODEL_NAME_2.cat'=>array(
                        'asc'=>'MODEL_NAME_2.cat',
                        'desc'=>'MODEL_NAME_2.cat DESC',
                    ),
                  '*',
                )
        ),
        'pagination'=>array(
            'pageVar'=>'page'
        )
    ));

    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

in my view

$this->widget('zii.widgets.CListView', array(
                    'dataProvider'=>$dataProvider,
                    'itemView'=>'_view', // refers to the partial view named '_view'
                    'enableHistory'=> true,
                    'sortableAttributes' => array('MODEL_NAME_2.cat'=>'Make'),
                    'pagerCssClass' => 'pagination',
                    'loadingCssClass' => '', //remove loading icon
                    'template'=>'
                        <div class="row">
                            <div class="col-md-12">
                                <div class="pull-left">{summary}</div>
                                <div class="pull-right">{sorter}</div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12">{items}</div>
                        </div>',

                )); 

ideally i would like my url to look like this

mysite.com/bla/page/2/sort/cat/desc

basically using alot of / and no ? or &

Upvotes: 0

Views: 319

Answers (1)

Pentium10
Pentium10

Reputation: 208042

In ListView definition change:

'sortableAttributes' => array('make'=>'Make'),

In your dataProvider

'sort'=>array(
               'defaultOrder'=>'MODEL_NAME_2.cat ASC',
                'attributes'=>array(
                    'make'=>array(
                        'asc'=>'MODEL_NAME_2.cat',
                        'desc'=>'MODEL_NAME_2.cat DESC',
                    ),
                  '*',
                )
        ),

Upvotes: 2

Related Questions