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

29
如何在Yii2 GridView中启用和禁用排序?
4个回答

53

您可以自定义DataProvider中的列排序。例如,如果您在GridView中使用ActiveDataProvider,则可以按照以下方式指定可排序的列:

$dataProvider = new ActiveDataProvider([
    'query' => Model::find(),
    'sort' => ['attributes' => ['column1','column2']]
]);
在上面的例子中,只有 column1column2 是可排序的。
您还可以像下面这样禁用所有列的排序:
'sort' =>false

建议查看 Yii2 的官方文档:类 yii\data\Sort,因为它定义了:

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


这对我来说解决了问题,太棒了。谢谢! - Paramone
我该如何对关系型和聚合数据进行排序? - Ejaz Karim
我还没有找到一种方法,可以在您希望对ActiveDataProvider应用排序但又不允许用户重新排序的情况下使其工作。对于这种情况,您可以采用@Priyanka的解决方案。 - Rich Harding

19

除了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


1
你好!请问如何对具有双重关系的对象进行排序?例如 location.city.name - Sergey Mishin

18

如果您想为GridView的特定列禁用排序,则可以像这样操作:

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

通过使用 'enableSorting' => false


这也适用于当您希望对ActiveDataProvider应用排序,但不允许用户重新排序时。谢谢 :) - Rich Harding

7
您可以在控制器中通过以下方式禁用排序功能:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort->sortParam = false;

$dataProvider->sort = false; 用于禁用所有排序字段。 - Manoj Rai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接