当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp实现数组分页示例

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-09 11:57:08 浏览: 评论:0 

这篇文章主要介绍了thinkphp实现数组分页示例,需要的朋友可以参考下

在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方法,代码如下:

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

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

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

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

  1. public function nodeslist(){ 
  2. $portal = new PortalApi; 
  3. $nodelist = $portal->getNodeLists($this->uid); 
  4.  
  5. $count = count($nodelist['data']); 
  6. $p = new Page($count,10); 
  7. $lists = array_slice($nodelist['data'], $p->firstRow,$p->listRows); 
  8. $page = $p->show(); 
  9. $this->assign('page',$page); 
  10. $this->assign('nodes',$lists); 
  11. $this->display();  
  12.  } 

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

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

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

第6行为Page类传入参数。

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

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

第10行同理。

下面是view中的代码:

  1. <div class="page-list"> 
  2.  
  3. $page} 
  4.  
  5. </div> 

如果仅仅这样的话,显示出来的效果并不友好。再找出来Page类的定义:

  1. // 分页显示定制 
  2.  
  3. private $configarray
  4.  
  5. 'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>'
  6.  
  7. 'prev' => '上一页'
  8.  
  9. 'next' => '下一页'
  10.  
  11. 'first'=> '第一页'
  12.  
  13. 'last' => '...%TOTAL_PAGE%'
  14.  
  15. 'theme'=> '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%'

Tags: thinkphp数组分页

分享到: