Thinkphp下实现对数组的分页

   今天终于把两周以前的任务完成了,趁着余热记下来分享给你们。php

   说一下任务,在thinkphp的框架下实现分页。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了。html

   thinkphp是MVC架构的,MVC对于任何ITers来讲都不陌生,模型(model)-视图(view)-控制器(controller)。他将逻辑和数据分开处理,少了不少繁琐的过程。node

   其实在官方的资料中已经详细的介绍了怎么分页,传送门:http://document.thinkphp.cn/manual_3_2.html#data_pageweb

   但是并不适用于数据已经从DB中取出,而且转换为数组的状况,我接触PHP满打满算2个月,接触thinkphp不过3周。以前把不少时间花在了官方文档上,去熟悉thinkphp。也算是磨刀不误砍柴工吧。这里把官方文档看成比较进行阐述: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方法。好了,工具找到了,实现就很容易了。直接上代码:php框架

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

    把‘prev’,‘next’的值重写。变成中文的上一页,下一页。可是还有问题,就是页数之间挨的太近。好,找到显示页数的代码:

if($page <= $this->totalPages){

   $link_page .= '<a class="num" href="' . $this->url($page) . '">' ." ".$page. " ".'</a>';
} 

                }

   在页数先后加入空格。如今能够看效果了:

   跟大背景仍是挺配,固然,能够根据本身的状况设置不一样的效果。

   总结以下:

   一、php和Thinkphp为咱们封装了太多的函数,去使用他们能够事半功倍。

         推荐网站:http://www.php.net/docs.php    http://document.thinkphp.cn/manual_3_2.html

   二、编程不单单注重功能的实现,展示给用户的是友好的界面。


祝你们学有所成!

相关文章
相关标签/搜索