thinkphp实现数组分页示例 |
本文标签:thinkphp数组分页 在thinkphp的框架下实现分页 。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了 。thinkphp是MVC架构的,MVC对于任何ITers来说都不陌生,模型(model)-视图(view)-控制器(controller) 。他将逻辑和数据分开处理,少了很多繁琐的过程 。其实在官方的资料中已经详细的介绍了怎么分页,传送门:http://document.thinkphp.cn/manual_3_2.html#data_page (只举文档上第一个方法):利用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%, 在页数前后加入空格 。现在可以看效果了: 跟大背景还是挺配,当然,可以根据自己的情况设置不同的效果 。 |