[Yii2笔记]059数据的分页显示(Pagination) [ 技术分享 ]
说明
学习Yii Framework 2(易2框架)的过程是漫长的,也是充满乐趣的,以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现,提供了较完整的代码,供你参考。不妥之处,请多多指正!
原文网址:
http://www.yiiframework.com/doc-2.0/guide-output-pagination.html
本文主题:数据的分页显示(Pagination)
当在一个网页中有太多的数据被显示时,一个常用的策略是将它们显示在多页中,每页仅显示一小部分数据。这个策略被称为分页(pagination)。
Yii使用yii\data\Pagination对象来表示分页模式,特别是: total count:定义数据项的总数,注意这个数字通常比需要显示在一个页面中的数据项要多。 page size:定义每页包含的数据项,默认值是20。 current page:当前页数(从0开始),默认值是0,也就是第1页。
使用一个全定义的yii\data\Pagination对象,你可以获取和显示数据的一部分。例如,如果你是从数据库中获取的数据,你可以定义DB查询的OFFSET和LIMIT项为分页对象提供的数值。代码如下:
use yii\data\Pagination;
//构建一个获取所有status=1的文章的DB查询语句
$query=Article::find()->where(['status'=>1]);
//获取文章的总数(但并没有获取所有文章数据)
$count=$query->count();
//使用文章总数创建一个分页对象
$pagination=new Pagination(['totalCount'=>$count]);
//使用分页对象获取限定的文章数据
$articles=$query->offset($pagination->offset)
->limit($pagination->limit)
->all();
上面的例子会返回哪一页的文章呢?它由一个名为page的查询参数决定。默认情况下,分页对象会尝试将page参数值设置为当前页,如果此参数为空,则默认值为0。 为了让分页的前台显示更加方便,Yii提供了yii\widgets\LinkPager小部件来显示页数按钮,用户可以点击按钮即可显示相应页码的数据。这个小部件需要分页对象这样它才能知道当前页数,以及显示多少个页码按钮,例如:
use yii\widgets\LinkPager;
echo LinkPager::widget([
'pagination'=>$pagination,
]);
如果你要手动构建UI元素,你可以使用yii\data\Patination::createUrl()去创建指向各个页面的URL,此方法需要一个页码参数,将创建一个包含页参数的已格式化URL的属性,例如:
//定义创建URL将要使用到的路由
//如果你没有定义它,当前请求路由将被使用
$pagination->route='article/index';
//将显示:/index.php?r=article%2Findex&page=100
echo $pagination->createUrl(100);
//将显示:/index.php?r=article%2Findex&page=101
echo $pagination->creaetUrl(101);
小贴士:当创建分页对象时,你可以通过设置pageParam属性来自定义page查询参数的名称。
(全文完)
共 0 条回复
没有找到数据。
阿江
注册时间:2015-10-18
最后登录:2024-03-03
在线时长:186小时21分
最后登录:2024-03-03
在线时长:186小时21分
- 粉丝94
- 金钱16816
- 威望160
- 积分20276