Ali*_*our 38
您可以自定义列中的列DataProvider.例如,如果您ActiveDataProvider在自己中使用,则GridView可以指示可排序的列,如下所示:
$dataProvider = new ActiveDataProvider([
'query' => Model::find(),
'sort' => ['attributes' => ['column1','column2']]
]);
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,只有column1和column2是排序能.
您还可以禁用所有列的排序,如下所示:
'sort' =>false
Run Code Online (Sandbox Code Playgroud)
建议查看Yii2官方文档:类yii\data\Sort它定义它:
Sort表示与排序相关的信息. 当需要根据一个或多个属性对数据进行排序时,我们可以使用Sort来表示排序信息并生成可导致排序操作的适当超链接.
Ehs*_*veh 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
],
],],
]);
}
Run Code Online (Sandbox Code Playgroud)
资料来源: http ://www.yiiframework.com/doc-2.0/yii-data-sort.html
小智 7
如果要禁用对特定列的gridview排序,请执行以下操作:
[
'attribute' => 'name',
'enableSorting' => false
],
Run Code Online (Sandbox Code Playgroud)
通过使用 'enableSorting' => false
您可以像这样在控制器中禁用排序:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort->sortParam = false;
Run Code Online (Sandbox Code Playgroud)