thinkphp实现数组分页示例


Posted in PHP onApril 13, 2014

在thinkphp的框架下实现分页。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了。thinkphp是MVC架构的,MVC对于任何ITers来说都不陌生,模型(model)-视图(view)-控制器(controller)。他将逻辑和数据分开处理,少了很多繁琐的过程。其实在官方的资料中已经详细的介绍了怎么分页,传送门:http://document.thinkphp.cn/manual_3_2.html#data_page

可是并不适用于数据已经从DB中取出,并且转换为数组的情况,我接触PHP满打满算2个月,接触thinkphp不过3周。之前把很多时间花在了官方文档上,去熟悉thinkphp。也算是磨刀不误砍柴工吧。这里把官方文档当作比较进行阐述:

(只举文档上第一个方法):利用Page类和limit方法,代码如下:

$User = M('User'); // 实例化User对象
$count= $User->where('status=1')->count();// 查询满足要求的总记录数
$Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$show = $Page->show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板

基本思想就是先计算总的记录数,然后根据所设置的每页显示的记录数来分页。使用Thinkphp封装好的Page类可以很方便的实现。实现的重点在第11行,limit方法就是按照一定的规则从查询数据中抽取数据。但是数据已经取出又怎么办呢?

我们用到了php自带的函数array_slice( )。定义在此:http://www.php.net/manual/en/function.array-slice.php

其实就是数组版的limit方法。好了,工具找到了,实现就很容易了。直接上代码:

public function nodeslist(){
$portal = new PortalApi;
$nodelist = $portal->getNodeLists($this->uid);$count = count($nodelist['data']);
$p = new Page($count,10);
$lists = array_slice($nodelist['data'], $p->firstRow,$p->listRows);
$page = $p->show();
$this->assign('page',$page);
$this->assign('nodes',$lists);
$this->display(); 
 }

代码有删减,只保留实现细节。

第3行getNodeLists方法从数据库中取出数据并赋值给数组nodelist。

第5行count计算出数组元素的个数。

第6行为Page类传入参数。

第7行的array_slice函数代替了limit方法。原理相同。

第9行用assign方法为模版赋值。定义在此:http://document.thinkphp.cn/manual_3_2.html#assign

第10行同理。

下面是view中的代码:

 <div class="page-list">
{$page}
 </div>

如果仅仅这样的话,显示出来的效果并不友好。再找出来Page类的定义:
// 分页显示定制
private $config= array(
'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',
'prev' => '上一页',
'next' => '下一页',
'first'=> '第一页',
'last' => '...%TOTAL_PAGE%',
'theme'=> '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',

在页数前后加入空格。现在可以看效果了:

thinkphp实现数组分页示例

跟大背景还是挺配,当然,可以根据自己的情况设置不同的效果。

PHP 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
php 文章调用类代码
Aug 11 PHP
php使用百度翻译api示例分享
Jan 31 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
php实现微信公众号无限群发
Oct 11 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
php常用正则函数实例小结
Dec 29 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 #PHP
php读取大文件示例分享(文件操作类)
Apr 13 #PHP
php使用smtp发送支持附件的邮件示例
Apr 13 #PHP
php实现上传图片生成缩略图示例
Apr 13 #PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 #PHP
PHP header()函数常用方法总结
Apr 11 #PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 #PHP
You might like
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python Timer 类使用介绍
2020/12/28 Python
Intersport西班牙:在线体育商店
2019/11/06 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
探亲邀请信范文
2014/01/30 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
教导处教学工作总结
2015/08/12 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS