如何在Yii2 GridView中启用和禁用排序?
答案 0 :(得分:35)
您可以自定义DataProvider
中的列排序。例如,如果您在ActiveDataProvider
中使用GridView
,则可以指明可排序的列,如下所示:
$dataProvider = new ActiveDataProvider([
'query' => Model::find(),
'sort' => ['attributes' => ['column1','column2']]
]);
在上面的示例中,只有column1
和column2
可以排序。
您还可以禁用所有列的排序,如下所示:
'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
],
],],
]);
}
答案 2 :(得分:5)
如果您想从gridview中为特定列禁用排序,请执行以下操作:
[
'attribute' => 'name',
'enableSorting' => false
],
使用'enableSorting' => false
答案 3 :(得分:4)
您可以在控制器中禁用排序,如下所示:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort->sortParam = false;