yii2.0表格如何排序

广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买

yii2.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表格如何排序的详细内容,更多请关注9543建站博客其它相关文章!

广告:SSL证书一年128.66元起,点击购买~~~

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。

作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:thinkphp5怎么判断变量是否为空
下一篇:一起看看小程序开发小游戏注意事项

发表评论

关闭广告
关闭广告