thinkphp实现数组分页示例

 更新时间:2014年04月13日 11:34:08   作者:  
这篇文章主要介绍了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方法,代码如下:

复制代码 代码如下:

$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%',

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

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

相关文章

  • PHP 使用redis简单示例分享

    PHP 使用redis简单示例分享

    这篇文章主要介绍了PHP 使用redis简单示例分享,主要是给大家展示下,php使用redis的方法,有需要的小伙伴们参考下。
    2015-03-03
  • 使用php+swoole对client数据实时更新(一)

    使用php+swoole对client数据实时更新(一)

    这篇文章主要介绍了使用php+swoole对client数据实时更新(一) 的相关资料,需要的朋友可以参考下
    2016-01-01
  • php parse_str() 函数的定义和用法

    php parse_str() 函数的定义和用法

    下面小编就为大家带来一篇php parse_str() 函数的定义和用法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • ThinkPHP学习笔记(一)ThinkPHP部署

    ThinkPHP学习笔记(一)ThinkPHP部署

    我是在新浪的SAE上安装ThinkPHP,SAE引擎的,直接安装源代码包,然后启动Memcache和MySql服务就可以运行成功了。
    2014-06-06
  • PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法

    PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法

    在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了
    2016-01-01
  • laravel 实现登陆后返回登陆前的页面方法

    laravel 实现登陆后返回登陆前的页面方法

    今天小编就为大家分享一篇laravel 实现登陆后返回登陆前的页面方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 在Laravel的Model层做数据缓存的实现

    在Laravel的Model层做数据缓存的实现

    这篇文章主要介绍了在Laravel的Model层做数据缓存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • jQuery+Ajax+PHP“喜欢”评级功能实现代码

    jQuery+Ajax+PHP“喜欢”评级功能实现代码

    本文基于jQuery,通过PHP与mysql实现了一个评级功能,是一个简单的非常好的ajax应用实例,需要的朋友可以参考下
    2015-10-10
  • PHP中单双号与变量

    PHP中单双号与变量

    这篇文章主要介绍了PHP中单双号与变量的相关资料,本文实例代码结合文字说明,给大家介绍的非常详细,需要的朋友参考下
    2018-03-03
  • Yii 2.0在Grid中格式化时间方法示例

    Yii 2.0在Grid中格式化时间方法示例

    这篇文章主要跟大家分享了Yii 2.0在Grid中格式化时间的相关资料,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-06-06

最新评论