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网络请求封装