0

0

yii2分页的使用及其扩展

php中文网

php中文网

发布时间:2016-05-25 18:02:53

|

1488人浏览过

|

来源于php中文网

原创

先说明下我们本篇文章都要讲哪些内容

  • 分页的使用,一步一步的教你怎么做
  • 分页类LinkPager和Pagination都可以自定义哪些属性
  • 分页类LinkPager如何扩展成我们所需要的

第一步,我们来看看yii2自带的分页类该如何去使用?

1、controller action

<span style="color: #0000ff;">use</span><span style="color: #000000;"> yii\data\Pagination;
</span><span style="color: #800080;">$query</span> = Article::find()->where(['status' => 1<span style="color: #000000;">]);
</span><span style="color: #800080;">$countQuery</span> = <span style="color: #0000ff;">clone</span> <span style="color: #800080;">$query</span><span style="color: #000000;">;
</span><span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span> Pagination(['totalCount' => <span style="color: #800080;">$countQuery</span>-><span style="color: #008080;">count</span><span style="color: #000000;">()]);
</span><span style="color: #800080;">$models</span> = <span style="color: #800080;">$query</span>->offset(<span style="color: #800080;">$pages</span>-><span style="color: #000000;">offset)
    </span>->limit(<span style="color: #800080;">$pages</span>-><span style="color: #000000;">limit)
    </span>-><span style="color: #000000;">all();
</span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$this</span>->render('index',<span style="color: #000000;"> [
    </span>'models' => <span style="color: #800080;">$models</span>,
    'pages' => <span style="color: #800080;">$pages</span>,<span style="color: #000000;">
]);</span>

 

标准小型企业网站
标准小型企业网站

包括完整的产品展示,精美留言本,经理致辞,公司简介,联系我们等,其中本系统的产品展示可以实现三级分类,无限产品后台自由添加。包含产品快速导航,产品简介,下订单,产品成分说明,常见问题说明,大小缩略图等非常实用的功能 产品管理页面:/HBYYDS/product/admin/login.asp 管理帐号及密码均为admin

下载

2、View

<span style="color: #0000ff;">use</span><span style="color: #000000;"> yii\widgets\LinkPager;
</span><span style="color: #008000;">//</span><span style="color: #008000;">循环展示数据</span>
<span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$models</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$model</span><span style="color: #000000;">) {
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> ......</span>
<span style="color: #000000;">}
</span><span style="color: #008000;">//</span><span style="color: #008000;">显示分页页码</span>
<span style="color: #0000ff;">echo</span> LinkPager::<span style="color: #000000;">widget([
    </span>'pagination' => <span style="color: #800080;">$pages</span>,<span style="color: #000000;">
])</span>

 

代码基本上可以完全拷贝,修改部分数据即可,相信大多数人都是看得懂的。

我们接下来看第二步,自带的分页类都可以定义哪些属性

 

首先我们说说LinkPager组件

  • pagination参数必填,这个是我们Pagination类的实例

默认分页类是下面这个样子的

  • 上下页按钮以及10个按钮
  • 首先,我们把上下页的按钮修改成中文
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'nextPageLabel' => '下一页', 
    'prevPageLabel' => '上一页',<span style="color: #000000;"> 
]); </span>?>

 

  • 如果你不想要显示上下页,可以将prevPageLabel和nextPageLabel设置为false
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'nextPageLabel' => <span style="color: #0000ff;">false</span>, 
    'prevPageLabel' => <span style="color: #0000ff;">false</span>,<span style="color: #000000;"> 
]); </span>?>

 

  • 默认不显示首页也尾页,如果你需要,可以这样设置
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'firstPageLabel' => '首页', 
    'lastPageLabel' => '尾页',<span style="color: #000000;"> 
]); </span>?>

 

  • 如果你的数据过少,不够2页,默认不显示分页,如果你需要,设置hideOnSinglePage=false即可
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'hideOnSinglePage' => <span style="color: #0000ff;">false</span>,<span style="color: #000000;"> 
]); </span>?>

 

  • 默认显示的页码为10页,可以设置maxButtonCount为你想要展示的页数
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'maxButtonCount' => 5,<span style="color: #000000;"> 
]); </span>?>

 

  • 有些人不喜欢默认的样式,想要分页带上自己的样式,可以设置options,不要忘了自行实现pre,next,disabled等样式
<?= LinkPager::<span style="color: #000000;">widget([ 
    </span>'pagination' => <span style="color: #800080;">$pages</span>, 
    'options' => ['class' => 'm-pagination'],<span style="color: #000000;"> 
]); </span>?>

 

接下来我们谈谈Pagination组件

默认的分页路由是下面这样子的,我们看看能做点什么

/controller/action?page=2&per-page=20

  • 首先,我们是必须要指定总条数totalCount的,没这个参数,分页也是没办法实现的
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>,<span style="color: #000000;"> 
]);</span>

 

  • 默认分页的数量是20,你可以设置pageSize为你想要的
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>, 
    'pageSize' => 5,<span style="color: #000000;"> 
]);</span>

 

  • 从上面的分页路由我们可以看到,默认带的有每页的数量per-page 如果你不想显示该参数,设置pageSizeParam=false就好
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>, 
    'pageSizeParam' => <span style="color: #0000ff;">false</span>,<span style="color: #000000;"> 
]);</span>

 

  • 我们也可以看到,默认的页面取决于参数page,如果你想改变该参数为p,设置pageParam=p就好
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>, 
    'pageParam' => 'p',<span style="color: #000000;"> 
]);</span>

 

  • 如果你的分页存在于首页,相信你肯定想要/?p=1而不是/site/index?p=1,我们看看怎么隐藏掉路由
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>, 
    'route' => <span style="color: #0000ff;">false</span>,<span style="color: #000000;"> 
]);</span>

 

  • 可能你会发现分页类Pagination有一个bug,假如我们只有1页的数据,但是手动更改地址栏的page=20的时候,也会显示page=1的数据?当然,这在大部分接口API中就很让人厌烦。但是,这并非bug,而是一种友好的验证。设置validatePage=false即可避免掉该问题
<span style="color: #800080;">$pages</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Pagination([ 
    </span>'totalCount' => <span style="color: #800080;">$totalCount</span>, 
    'validatePage' => <span style="color: #0000ff;">false</span>, ]);

 

最后,我们整点新花样,扩展下他这个自带的分页!别一看见扩展俩字下面的就直接不看了,只有自己学会扩展了,以后才能越来越强!怎么个扩展法呢?我们把分页组件改为上下页那种,具体参考下图做个对比吧

​[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]

继续阅读

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 1万人学习

Web pack入门视频教程
Web pack入门视频教程

共9课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号