类别: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网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章