Yii2-GridView 如何给非模型中的字段增加排序功能
时间: 2024-03-05 20:48:48 浏览: 66
拖拽GridView中的Item进行排序源代码
5星 · 资源好评率100%
在Yii2-GridView中,可以通过使用`dataProvider`来实现对模型字段的排序,但是对于非模型中的字段,需要手动实现排序功能。以下是一种实现方式:
1. 在 `dataProvider` 中定义一个 `sort` 对象,用于排序。
```php
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'attributes' => [
'name', // 模型中的字段
'age', // 模型中的字段
'new_field' => [
'asc' => ['new_field' => SORT_ASC], // 非模型中的字段升序排序
'desc' => ['new_field' => SORT_DESC], // 非模型中的字段降序排序
'default' => SORT_DESC, // 默认排序方式
'label' => 'New Field', // 显示的列名称
],
],
'defaultOrder' => [
'new_field' => SORT_DESC,
],
],
]);
```
2. 在 `GridView` 中的列定义中添加需要排序的非模型中的字段。
```php
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'name',
'age',
[
'attribute' => 'new_field',
'label' => 'New Field',
'value' => function($model) {
// 计算非模型中的字段值
return $model->field1 + $model->field2;
},
],
],
]); ?>
```
通过以上方式,可以给非模型中的字段增加排序功能。
阅读全文