Yii 2.0排序功能的使用

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

一、设置排序规则

注意引入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为什么要那么处理的原因。

时间: 2024-11-06 09:58:16

Yii 2.0排序功能的使用的相关文章

YII 1.0 小功能总结

1.操作成功提示 只能使用一次,getFlash()取值以后,值就删除了 控制器中: Yii::app()->user->setFlash('success','修改成功'); 视图中: <?php If(Yii::app()->user->hasFlash('success')){ echo Yii::app()->user->getFlash('success'); } ?> 2.开启调试模式 在main.php里面 array( 'class'=>

YII框架实现排序

YII框架实现排序 用YII2实现批量修改排序功能,如下图 控制器: /** * Lists all CollectionAlbum models. * @return mixed */ public function actionIndex($collectionId=0) { $collection = Collection::findOne($collectionId); if(!$collection){ throw new NotFoundHttpException('The requ

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

MapReduce实现排序功能

期间遇到了无法转value的值为int型,我采用try catch解决 str2 2 str1 1 str3 3 str1 4 str4 7 str2 5 str3 9 用的\t隔开,得到结果 str1 1,4 str2 2,5 str3 3,9 str4 7 我这里map,reduce都是单独出来的类,用了自定义的key package com.kane.mr; import java.io.DataInput; import java.io.DataOutput; import java.i

IOS UITableView拖动排序功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,排序等功能,下面就来讲解一下如何实现排序. 排序是当表格进入编辑状态后,在单元格的右侧会出现一个按钮,点击按钮,就可以拖动单元格,移动位置,进行手动排序. 使用系统自带拖动排序功能的步骤: 1.让tableView进入编辑状态,也就是设置它的editing为YES 2.返回编辑模式,也就是实现UITableViewDelegate中的tableview:editingStyleForRowAtIndexPath:方法,在

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;Web版本模块管理界面新增模块排序功能

模块(菜单)的排序是每个系统都必须要有的功能,我们框架模块的排序在业务逻辑中已经体现. WinForm版本可以直接在界面上对模块进行排序以控制模块展示的顺序.Web版本在3.2版本中也新增了直接可以模块管理界面对模块进行排序的人性化操作,大大的方便了管理人员.模块的排序在模块管理主界面分页按钮的右侧如下图所示. 三个按钮功能分别为:上移.下移.确认修改 WebMVC部分,模块排序功能代码参考: /// <summary> /// 保存模块排序功能 /// </summary> //

[转载]EasyUI中数据表格DataGrid添加排序功能

我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前页的数据进行排序,不是我们想要用效果. 下面开始演示从服务器端排序功能. 第一步,启用EasyUI DataGrid的排序功能: 具体就是为列设置sortable属性,如下: { field: "SOID", title: "订单单号", width: "80

修改PHPCMS V9相关文章、专题listorder、order排序功能的方法

phpcms v9自带的相关文章.专题等模块不支持order排序,调用的相关文章.专题默认为升序,这样就造成了一个问题,调出来的相关文章是最早的文章,没有时效性.我们只能通过修改程序文件,只需简单修改一个文件,就能达到我们的需求. 修改相关文章排序的方法: 打开根目录下的phpcms/modules/content/classes/content_tag.class.php,找到 $r = $this->db->select($sql2, '*', $limit, '','','id'); 修

初学Redis(4)——简单实现Redis缓存中的排序功能

在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应用:其次,在缓存中排序不会遇到表锁定的问题.Redis恰好提供了排序功能,使我们可以方便地实现缓存排序. Redis中用于实现排序功能的是SORT命令.该命令提供了多种参数,可以对列表,集合和有序集合进行排序.SORT命令格式如下: SORT key [BY pattern] [LIMIT offs