• Yii 2.0排序功能的使用


    在Yii2.0项目的实际开发中,经常会遇到使用Yii2.0自带的排序功能。下面是排序功能的具体使用方法。

    一、设置排序规则

     注意引入Sort类,如:use yiidataSort;

            // 设置排序字段
            $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为什么要那么处理的原因。

  • 相关阅读:
    最近遇到了这个坑,特意记录下
    《java8实战阅读笔记》
    Namespace的简讲
    发展历程C++及C++与C语言的关系
    进程间通信的概述2
    本来调试无误的程序在真机运行时报标题错误解决方案
    navagationController 的子控制器如何取消右滑返回
    iOS常见的设计模式
    代码:Masonry 第三方框架
    Autolayout的在storyboard警告和错误
  • 原文地址:https://www.cnblogs.com/itsharehome/p/4737032.html
Copyright © 2020-2023  润新知