yii2.0表格如何排序

发布时间 - 2019-12-09 00:00:00    点击率:

在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为什么要那么处理的原因。


# sort  # public  # Attribute  # 对象  # YII  # 分页  # 自定义  # 自带  # 多个  # 经常会  # 多条  # 将给  # 为空  # 数据查询  # 后处理 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Telescope进行调试?(安装和使用教程)  如何快速使用云服务器搭建个人网站?  JavaScript Ajax实现异步通信  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何使用Service Container和依赖注入?(代码示例)  如何用腾讯建站主机快速创建免费网站?  Laravel如何使用.env文件管理环境变量?(最佳实践)  🚀拖拽式CMS建站能否实现高效与个性化并存?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  html5的keygen标签为什么废弃_替代方案说明【解答】  利用 Google AI 进行 YouTube 视频 SEO 描述优化  中山网站推广排名,中山信息港登录入口?  如何快速搭建高效简练网站?  ,交易猫的商品怎么发布到网站上去?  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  免费网站制作appp,免费制作app哪个平台好?  如何在自有机房高效搭建专业网站?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  EditPlus中的正则表达式 实战(1)  JS经典正则表达式笔试题汇总  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何快速查询网址的建站时间与历史轨迹?  微信推文制作网站有哪些,怎么做微信推文,急?  利用vue写todolist单页应用  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  如何快速搭建虚拟主机网站?新手必看指南  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  微信小程序 闭包写法详细介绍  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】