Cортировка в CGridView

06/18/2013, автор admin, категории Yii, Новости IT

Как сделать сортировку в Grid на фреймворке Yii? Как запретить сортировку по тем или иным колонкам? Как настроить сортировку таблицы по какому либо полю по умолчанию (или по дефолту)? С этими вопросами сталкиваются как новички так и опытные программисты, вобщем все кому приходилось работать с фреймворком Yii. На все выше перечисленные вопросы вы найдете ответ в этом посте.

На самом деле все делается очень просто, как вы знаете в CGridView передается CActiveDataProvider который определяется прям во вьюхе, либо в модели. В любом случае нам лишь нужно передать необходимый параметр sort.

В своем примере я покажу это на примере таблицы Banners. В методе search зададим список колонок по которым разрешена сортировка, для этого тоже имеется несколько способов:
1. Указать массив названий колонок по которым разрешена сортировка:

$dataProvider = new CActiveDataProvider('Banners', array(
   'sort'=>array('attributes'=>array('id','name')), // названия колонок по которым разрешена сортировка
));


2. С помощью класса CSort, с помощью которого мы так же можем указать сортировку в связанных таблицах (в моем случае page.title). Так же обратите внимание что с помощью ключа defaultOrder можно задать параметры сортировки по умолчанию.

$sort = new CSort();
$sort->attributes = array(
    'defaultOrder'=>'t.date DESC',
    'id'=>array(
        'asc'=>'t.id',
        'desc'=>'t.id DESC',
    ),
    'name'=>array(
        'asc'=>'t.name',
        'desc'=>'t.name DESC',
    ),
    'pageTitle'=>array(
        'asc'=>'page.title',
        'desc'=>'page.title desc',
    ),
);

return new CActiveDataProvider('Banners', array(
    'criteria'=>$criteria,
    'sort'=>$sort
));

В CGridView нам остается лишь передать объект класса CActiveDataProvider, и все отлично заработает.

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'articles-grid',
    'dataProvider' => $model->search(),
    'columns' => $columns,
));

Вот таким не хитрым способом настраивается сортировка в CGridView в замечательном фреймворке Yii.

Можно прочесть также:

Комментарии закрыты.