【问题标题】:How to enable and disable sort in Yii2 GridView?如何在 Yii2 GridView 中启用和禁用排序?
【发布时间】:2015-02-12 08:31:15
【问题描述】:

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

【问题讨论】:

    标签: sorting gridview yii2


    【解决方案1】:

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

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

    通过使用'enableSorting' => false

    【讨论】:

    • 这也适用于您希望对 ActiveDataProvider 应用排序但不允许用户重新排序的情况。谢谢:)
    【解决方案2】:

    您可以像这样在控制器中禁用排序:

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

    【讨论】:

      【解决方案3】:

      除了阿里的回答,对于聚合列和相关列,您可以执行以下操作:

      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

      【讨论】:

      • 您好!你能告诉我如何对双重关系进行排序吗?例如location.city.name
      【解决方案4】:

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

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

      在上面的例子中,只有 column1column2 是可排序的。

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

      'sort' =>false
      

      建议看一下Yii2的官方文档:Class yii\data\Sort的定义:

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

      【讨论】:

      • 这对我有用,太棒了。谢谢!
      • 如何对关系和聚合数据进行排序?
      • 在您希望对 ActiveDataProvider 应用排序但不允许用户重新排序的情况下,我还没有找到一种方法来完成这项工作。对于这种情况,您可以应用@Priyanka 的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多