如何在Yii2 GridView中启用和禁用排序?

时间:2014-12-13 21:30:11

标签: sorting gridview yii2

如何在Yii2 GridView中启用和禁用排序?

Example

4 个答案:

答案 0 :(得分:35)

您可以自定义DataProvider中的列排序。例如,如果您在ActiveDataProvider中使用GridView,则可以指明可排序的列,如下所示:

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

在上面的示例中,只有column1column2可以排序。

您还可以禁用所有列的排序,如下所示:

'sort' =>false

建议您查看Yii2的官方文档:Class yii\data\Sort正如其定义:

  

排序表示与排序相关的信息。   当需要根据一个或多个属性对数据进行排序时,我们可以使用Sort来表示排序信息并生成可导致排序操作的适当超链接。

答案 1 :(得分:15)

除了Ali的答案,对于汇总和相关列,您可以执行以下操作:

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

答案 2 :(得分:5)

如果您想从gridview中为特定列禁用排序,请执行以下操作:

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

使用'enableSorting' => false

答案 3 :(得分:4)

您可以在控制器中禁用排序,如下所示:

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