thinkphp分页封装

Posted 他的她

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp分页封装相关的知识,希望对你有一定的参考价值。

php

1.在think目录下新建文件Page.php

2.写如分页封装

  1 <?php
  2 /**
  3  * Created by PhpStorm.
  4  * User: Administrator
  5  * Date: 2018/5/8
  6  * Time: 18:02
  7  */
  8 
  9 namespace think;
 10 use think\Db;
 11 /**
 12  * 分页封装
 13  * */
 14 class Page
 15 {
 16     /**
 17      * 每页显示的条数
 18      * */
 19     private static $pageum = 5;
 20 
 21     /**
 22      * 每页显示的页码数
 23      * */
 24     private static $page_show = 5;
 25 
 26     /**
 27      * 当前页
 28      * */
 29     private static $page;
 30 
 31     /**
 32      * 跳转的链接 @@ $link @@
 33      * */
 34 
 35     /**
 36      * 数据库 @@ $surface @@
 37      * */
 38 
 39     public static function mypage($link,$surface){
 40         /*判断是否有页码传入*/
 41         if(empty(input(‘page‘))){
 42             self::$page = 1;
 43         }else{
 44             self::$page = input(‘page‘);
 45         }
 46         /*查询当前页数据*/
 47         $sql = Db::query("select * from $surface order by time desc limit ".(self::$page-1)*self::$pageum.",". self::$pageum);
 48         /* 查询数据总条数 $to_page */
 49         $r = Db::table($surface)->select();
 50         $to_page = count($r);
 51         /* 查询总页数 $result*/
 52         $result = ceil($to_page/self::$pageum);
 53         /**
 54          * 打印 首页 上一页
 55          */
 56         $page_print = ‘‘;//$page_print的默认值为空
 57         $home = 1;//第一页(首页)
 58         if(self::$page<=1){
 59             $page_print .= "<a href=$link$home>首页</a>";
 60             $page_print .= "<a href=$link$home><span>上一页</span></a>";
 61         }else{
 62             $page_print .= "<a href=$link$home>首页</a>";
 63             $page_print .= "<a href=$link".(self::$page-1)."><span>上一页</span></a>";
 64         }
 65         /**
 66          * 定义偏移量
 67          */
 68         /*初始化默认值(判断显示页码数是基数还是偶数)*/
 69 
 70         if((self::$page_show%2)==0){
 71             $offset = (self::$page_show)/2;//偏移量
 72             $start = self::$page-($offset-1);//左偏移
 73             $end = self::$page+$offset;//右偏移
 74         }else{
 75             /*基数*/
 76             $offset = (self::$page_show-1)/2;//偏移量
 77             $start = self::$page-$offset;//左偏移
 78             $end = self::$page+$offset;//右偏移
 79         }
 80         /*当前页码为2时*/
 81         if(self::$page <= 2){
 82             $start = 1;
 83             $end = self::$page_show;
 84         }
 85         /*当页页码大于最大页码时*/
 86         if(self::$page >= $result-$offset){
 87             $start = $result-self::$page_show+1;
 88             $end = $result;
 89         }
 90         /*当前页码小于显示页码时*/
 91         if($result<self::$page_show){
 92             $start = 1;
 93             $end = $result;
 94         }
 95         /**
 96          * 循环打印页码
 97          */
 98         //如果最大页数大于要显示的页数的时候
 99         if($result<self::$page_show){
100             for($i=1;$i<=$result;$i++){
101                 if($i == self::$page){
102                     $page_print .= "<a class=‘active‘>{$i}</a>";
103                 }else{
104                     $page_print .= "<a href=$link$result>{$i}</a>";
105                 }
106             }
107         }else{
108             for($i=$start;$i<=$end;$i++){
109                 if($i == self::$page){
110                     $page_print .= "<a class=‘active‘>{$i}</a>";
111                 }else{
112                     $page_print .= "<a href=$link$i>{$i}</a>";
113                 }
114             }
115         }
116         /**
117          * 打印 尾页 下一页
118          */
119         if(self::$page >= $result){
120             $page_print .= "<a href=$link$result><span>下一页</span></a>";
121             $page_print .= "<a href=$link$result>尾页</a>";
122         }else{
123             $page_print .= "<a href=$link".(self::$page+1)."><span>下一页</span></a>";
124             $page_print .= "<a href=$link$result>尾页</a>";
125         }
126         return array(‘page_print‘=>$page_print,‘to_page‘=>$to_page,‘sql‘=>$sql);
127     }
128 }

3.在想引用分页的PHP文件中引入

use think\Page;

4.调用静态类传入地址和数据库

$data = Page::mypage(‘地址后面接上?page=‘,‘数据库‘);

5.取出数据

$result = $data[‘sql‘];

6.取出分页

$page = $data[‘page‘];

7.把数据传入前端页面展示出来

$this->assign(‘result‘,$result);
$this->assign(‘page‘,$page);

html页面

 

<!DOCTYPE html>
<html lang="en">
    <head>
    </head>
    <body>
        {volist name="result" id="v"}
            数据
        {/volist}
        {$page}
    </body>
</html>            

 

最后根据所给类名设置css样式

里面页码和显示数据条数都是可以自己设置

 

以上是关于thinkphp分页封装的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

面向对象封装分页代码

modx - 当我在同上片段中使用“&documents =”参数时,分页不起作用

回归 | js实用代码片段的封装与总结(持续更新中...)

[转]Oracle分页之二:自定义web分页控件的封装

JQuery分页插件封装(源码来自百度,自己封装)