Yii2.0实用功能技巧解密之——分页功能

Yii中的分页功能主要由yii\web:
Linkable接口、yii\widgets:
LinkPager类和yii\data:
Pagination类三个组成。

  • yii\data: Pagination 主要功能是对分页中的参数进行设置,如当前页、每页大小、总页数,总记录数等。

  • yii\widgets: LinkPager 主要是根据yii\data:
    Pagination类所提供的参数生成前台页面的分页html代码。

使用:

先在action里面生成分页对象,然后在前台的LinkPager中使用。
后台controller中:


function actionIndex()
{
$query = Article::find()->where([‘status‘ => 1]);
$countQuery = clone $query;
$pages = new Pagination([‘totalCount‘ => $countQuery->count()]);
$models = $query->offset($pages->offset)
->limit($pages->limit)
->all();

return $this->render(‘index‘, [
‘models‘ => $models,
‘pages‘ => $pages,
]);
}

前台view中:


foreach ($models as $model) {
// display $model here
}

// display pagination
echo LinkPager::widget([
‘pagination‘ => $pages,
]);

增强版

那如果要设置每页的大小或者再加排序怎么办?这个我已经对这个功能进行了封装
在基类控制器中添加:


public function getPagedRows($query,$config=[])
{
$countQuery = clone $query;
$pages=new Pagination([‘totalCount‘ => $countQuery->count()]);
if(isset($config[‘pageSize‘]))
{
$pages->setPageSize($config[‘pageSize‘],true);
}

$rows = $query->offset($pages->offset)->limit($pages->limit);
if(isset($config[‘order‘]))
{
$rows = $rows->orderBy($config[‘order‘]);
}
$rows = $rows->all();

$rowsLable=‘rows‘;
$pagesLable=‘pages‘;

if(isset($config[‘rows‘]))
{
$rowsLable=$config[‘rows‘];
}
if(isset($config[‘pages‘]))
{
$pagesLable=$config[‘pages‘];
}

$ret=[];
$ret[$rowsLable]=$rows;
$ret[$pagesLable]=$pages;

return $ret;
}

其中$config参数有:

  • pageSize:设置每页的大小

  • order:数据的排序

  • rows:返回的数组中数据对象的键名

  • pages:返回的数组中分页对象的键名

后台使用如下:


function actionIndex()
{
$query = Article::find()->where([‘status‘ => 1]);
//因为前台的数据对象为models,所以设置rows名称为models
$locals = $this->getPagedRows($query, [‘order‘=>‘time desc‘, ‘pageSize’=>5, ‘rows‘=>‘models‘]);
return $this->render(‘index‘, $locals);
}

是不是简单多了,而且由于这个功能实现在基类里面,所有的控制器都可以直接拿来用。

示例代码可查看:
https://github.com/yiifans/yiifo ...
/BaseController.php
 
https://github.com/yiifans/yiifo ...
hreadController.php
 
https://github.com/yiifans/yiifo ... lt/thread/index.php

Yii爱好者中文社区门户

Yii2.0实用功能技巧解密之——分页功能,布布扣,bubuko.com

时间: 2024-12-26 07:06:44

Yii2.0实用功能技巧解密之——分页功能的相关文章

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)

转自:http://blog.csdn.net/pukuimin1226/article/details/17558247 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. 最新盘古分词dll和词典管理工具下载:http://pangusegment.codeplex.com/ 词典下载:http://pangusegment.codeplex.com/releases/view/47411 L

Yii2.0实现语言包切换功能

在yii2.0高级模板框架中,以前台为例,首先  在前台frontend 下面建立  messages/zh-CN 在 messages文件夹中创建一个文件:  ①common.php                                                     如果是使用的后台目录,就在  backend/config/main.php 中添加如下的配置文件return  [                     'language'=>'zh-CN',//选择中文

Yii2.0论坛实例教程

Yii2.0现在已经出来Beta了,Yii2.0总的来说和Yii1.x还是相差挺大的.现在的教程大部分都还是1.x的,所以这论坛就作为Yii2.0的一个入门实例吧.我也会尽量把Yii2.0的各个新特性以及开发中的技巧一一列出来.如果哪位有兴趣可以一起交流一起来完成.功能列表:http://www.yiifans.com/forum.php?mod=viewthread&tid=68Git地址:https://github.com/yiifans/yiiforum另外,一般情况下会在每天早上提交一

JDBC使用数据库来完成分页功能

本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实现,而这里我们采用的是操作数据库的方式,而且在这种方式中,最重要的是带限制条件的查询SQL语句: select name from user limit m,n 其中m与n为数字.n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始),例如我们想从user表中先获取前五行数据项(1-5)的na

nginx1.9.4 +php 5.5.29+yii2.0配置手册

nginx1.9.4 +php 5.5.29+yii2.0配置手册 目录 一.????php5.5.29安装配置????2 二.????nginx1.9.4安装配置????2 三.????yii2.0安装配置????2 1.????基础版安装????2 2.????高级版安装????8 四.????问题????8 五.????参考资料????8 六.????附注????8 ? ? ? php5.5.29安装配置 php下载地址:http://php.net/downloads.php 下载php

网页分页功能的实现

最近在学习JavaWeb的时候,用到了分页功能,现在进行一个记录,以备不时之需 第一步:先完成分页Bean的编写. 就是对当前页数,每页显示的记录数,总记录数,总页数,分页显示的信息进行封装.作为通用的分页功能的实现,这里用到了泛型 import java.util.List; /** * 分页封装 * */ public class PageBean<T> { private int currPage;//当前页数 private int pageSize;//每页显示记录数 private

网站前端_JavaScript-项目经验.纯JavaScript实现客户端的分页功能?

项目简介: 说明: 此项目属于医院电子病例系统,由于历史原因,整个系统后台基于Java开发,前端使用Html+CSS+原生JavaScript,项目功能模块要求必须纯JS实现,而此次的任务是为住院病例页面编写一个客户端分页功能. 实现思路: 1. 基于客户端分页的前提是数据已经加载完毕,所以此功能模块必须等待数据加载完毕后再加载 2. 基于客户端分页的首页只需要显示24个患者信息即可 3. 上一页/当前页/下一页功能类似,基于当前页面传递同样的参数(页码, 限制患者数),所以自然而然想到了递归,

PHP框架Yii2.0安装(基础版、高级版)

最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指点出来. yii2.0的安装,官方提供了两种的安装办法,一种是通过composer来安装,另外一种是通过跟yii1.0的办法直接下载安装包来安装.至于对于第一种composer的安装,农成就不做多余的说明了,这里有很好的安装教程.点击进去就可以看到了,为此农成就不在说了,下面就给大家详细讲讲第二种通

UIScrollView代理 和分页功能

#import "ViewController.h" @interface ViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; /** 定时器 */ @property (nonatomic,