Как включить или отключить сортировку в Yii2 GridView?

Как включить или отключить сортировку в Yii2 GridView?

Example

Ответы

Ответ 1

Вы можете настроить сортировку столбцов в DataProvider. Например, если вы используете ActiveDataProvider в своем GridView, вы можете указать столбцы сортировки, как показано ниже:

$dataProvider = new ActiveDataProvider([
    'query' => Model::find(),
    'sort' => ['attributes' => ['column1','column2']]
]);

В приведенном выше примере только column1 и column2 сортируются.

Вы также можете отключить сортировку для всех столбцов, как показано ниже:

'sort' =>false

Предлагается ознакомиться с официальным документом Yii2: Класс yii\data\Sort Как он определяет его:

Сортировка представляет информацию, относящуюся к сортировке.Когда данные нужно сортировать в соответствии с одним или несколькими атрибутами, мы можем использовать Сортировку для представления информации сортировки и создания соответствующих гиперссылок, которые могут привести к действиям сортировки.

Ответ 2

В дополнение к Ali answer, для агрегированных и связанных столбцов вы можете сделать следующее:

public function actionIndex()
{
    $dataProvider = new ActiveDataProvider([
          'query' => User::find()->joinWith('role'),
          'sort' => ['attributes' => [
                   //Normal columns
                   'username',
                   'email',
                   //aggregated columns
                   'full_name' => [
                        'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                        'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                        'default' => SORT_DESC
                   ],
                   //related columns
                   'role.name' => [
                        'asc' => ['user_role.name' => SORT_ASC],
                        'desc' => ['user_role.name' => SORT_DESC],
                        'default' => SORT_DESC
                   ],
              ],],
    ]);
}

Источник: http://www.yiiframework.com/doc-2.0/yii-data-sort.html

Ответ 3

Вы можете отключить сортировку в контроллере следующим образом:

$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort->sortParam = false;

Ответ 4

Если вы хотите отключить сортировку из gridview для конкретного столбца, выполните следующие действия:

 [
     'attribute' => 'name',
     'enableSorting' => false
 ],

используя 'enableSorting' = > false,