如何在 Yii2 GridView 中启用和禁用排序?
Posted
技术标签:
【中文标题】如何在 Yii2 GridView 中启用和禁用排序?【英文标题】:How to enable and disable sort in Yii2 GridView? 【发布时间】:2015-02-12 08:31:15 【问题描述】:
【问题讨论】:
【参考方案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']]
]);
在上面的例子中,只有 column1
和 column2
是可排序的。
您还可以禁用所有列的排序,如下所示:
'sort' =>false
建议看一下Yii2
的官方文档:Class yii\data\Sort的定义:
排序表示与排序相关的信息。 当数据需要根据一个或多个属性进行排序时,我们可以使用 Sort 来表示排序信息,并生成合适的超链接,从而引发排序动作。
【讨论】:
这对我有用,太棒了。谢谢! 如何对关系和聚合数据进行排序? 在您希望对 ActiveDataProvider 应用排序但不允许用户重新排序的情况下,我还没有找到一种方法来完成这项工作。对于这种情况,您可以应用@Priyanka 的解决方案。以上是关于如何在 Yii2 GridView 中启用和禁用排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GridView::widget、Yii2 的搜索框中使用简单的下拉列表?