类别:YII / 日期:2019-12-10 / 浏览:191 / 评论:0

在Yii2.0项目标现实开发中,经常会碰到运用Yii2.0自带的排序功用。
展现多条数据时,一般须要对数据根据用户指定的列举行排序。 Yii 运用 yii\data\Sort 对象来代表排序计划的有关信息。 特别地:
1、attributes 指定 属性,数据根据其排序。 一个属性能够就是简朴的一个 model attribute, 也能够是连系了多个 model 属性或许 DB 列的复合属性。下面将给出更多细节。
2、attributeOrders 给出每一个属性当前设置的 排序方向。
3、orders 根据初级列的体式格局给出排序方向。
运用 yii\data\Sort,首先要声明什么属性能举行排序。 接着从 attributeOrders 或许 orders 获得当前设置的排序信息, 然后运用它们来自定义数据查询。
(引荐进修:yii框架)
下面是排序功用的细致运用方法:
一、设置排序划定规矩
注重引入Sort类,如:use yii\data\Sort;
// 设置排序字段 $sortObject = new Sort([ 'sort' => $sort, 'defaultOrder' => ['id' => SORT_DESC], 'attributes' => [ 'id' => [ 'asc' => ['id' => SORT_ASC], 'desc' => ['id' => SORT_DESC], ], 'user_name' => [ 'asc' => ['ecs_users.user_name' => SORT_ASC], 'desc' => ['ecs_users.user_name' => SORT_DESC], ], 'add_time' => [ 'asc' => ['add_time' => SORT_ASC], 'desc' => ['add_time' => SORT_DESC], ], ], ]);
二、运用Yii2.0自带分页功用并到场排序
// 处置惩罚分页 $queryClone = clone $query; $totalCount = $queryClone->count(); $pages = new Pagination(['defaultPageSize'=>$rows,'totalCount'=>$totalCount,'pageSizeLimit'=>false]); $query = $query->offset($offset) ->limit($pages->limit) ->orderBy($sortObject->orders) ->asArray() ->all();
三、修正Yii2.0排序底层代码
底层对应源码:vendor/yiisoft/yii2.0/data/Sort.php
1.为Sort类增添一个属性:public $sort;
2.在源码约莫249行到场以下代码:(完成post猎取分页参数)
// get要求猎取数组为空,则挪用自定义属性sort。用于满足post猎取后处置惩罚自定义参数 if(!isset($params[$this->sortParam])){ $params[$this->sortParam] = $this->sort; }
3.在控制器中吸收分页参数,以下:
$sort = $_POST['sort'] ? strval($_POST['sort']) : 'id'; $sort = $_POST['order'] == 'asc' ? $sort : '-'.$sort;
注重:Yii2.0中id代表根据id正序排序,-id代表根据id逆序排序。这也是上面语句2为何要那末处置惩罚的缘由。
以上就是yii2.0表格怎样排序的细致内容,更多请关注ki4网别的相干文章!