当前位置: 首页 > news >正文

PHP简单漂亮的分页类

本文介绍一款原生的PHP分页类,分页样式有点类似bootstrap。

  1. <?php

  2. /* * *********************************************
  3.  * @类名:   page
  4.  * @参数:   $myde_total - 总记录数
  5.  *          $myde_size - 一页显示的记录数
  6.  *          $myde_page - 当前页
  7.  *          $myde_url - 获取当前的url
  8.  * @功能:   分页实现
  9.  * @作者:   宋海阁
  10.  */

  11. class page {

  12.     private $myde_total;          //总记录数
  13.     private $myde_size;           //一页显示的记录数
  14.     private $myde_page;           //当前页
  15.     private $myde_page_count;     //总页数
  16.     private $myde_i;              //起头页数
  17.     private $myde_en;             //结尾页数
  18.     private $myde_url;            //获取当前的url
  19.     /*
  20.      * $show_pages
  21.      * 页面显示的格式,显示链接的页数为2*$show_pages+1。
  22.      * 如$show_pages=2那么页面上显示就是[首页] [上页] 1 2 3 4 5 [下页] [尾页] 
  23.      */
  24.     private $show_pages;

  25.     public function __construct($myde_total = 1, $myde_size = 1, $myde_page = 1, $myde_url, $show_pages = 2) {
  26.         $this->myde_total = $this->numeric($myde_total);
  27.         $this->myde_size = $this->numeric($myde_size);
  28.         $this->myde_page = $this->numeric($myde_page);
  29.         $this->myde_page_count = ceil($this->myde_total / $this->myde_size);
  30.         $this->myde_url = $myde_url;
  31.         if ($this->myde_total < 0)
  32.             $this->myde_total = 0;
  33.         if ($this->myde_page < 1)
  34.             $this->myde_page = 1;
  35.         if ($this->myde_page_count < 1)
  36.             $this->myde_page_count = 1;
  37.         if ($this->myde_page > $this->myde_page_count)
  38.             $this->myde_page = $this->myde_page_count;
  39.         $this->limit = ($this->myde_page - 1) * $this->myde_size;
  40.         $this->myde_i = $this->myde_page - $show_pages;
  41.         $this->myde_en = $this->myde_page + $show_pages;
  42.         if ($this->myde_i < 1) {
  43.             $this->myde_en = $this->myde_en + (1 - $this->myde_i);
  44.             $this->myde_i = 1;
  45.         }
  46.         if ($this->myde_en > $this->myde_page_count) {
  47.             $this->myde_i = $this->myde_i - ($this->myde_en - $this->myde_page_count);
  48.             $this->myde_en = $this->myde_page_count;
  49.         }
  50.         if ($this->myde_i < 1)
  51.             $this->myde_i = 1;
  52.     }

  53.     //检测是否为数字
  54.     private function numeric($num) {
  55.         if (strlen($num)) {
  56.             if (!preg_match("/^[0-9]+$/", $num)) {
  57.                 $num = 1;
  58.             } else {
  59.                 $num = substr($num, 0, 11);
  60.             }
  61.         } else {
  62.             $num = 1;
  63.         }
  64.         return $num;
  65.     }

  66.     //地址替换
  67.     private function page_replace($page) {
  68.         return str_replace("{page}", $page, $this->myde_url);
  69.     }

  70.     //首页
  71.     private function myde_home() {
  72.         if ($this->myde_page != 1) {
  73.             return "<a href='" . $this->page_replace(1) . "' title='首页'>首页</a>";
  74.         } else {
  75.             return "<p>首页</p>";
  76.         }
  77.     }

  78.     //上一页
  79.     private function myde_prev() {
  80.         if ($this->myde_page != 1) {
  81.             return "<a href='" . $this->page_replace($this->myde_page - 1) . "' title='上一页'>上一页</a>";
  82.         } else {
  83.             return "<p>上一页</p>";
  84.         }
  85.     }

  86.     //下一页
  87.     private function myde_next() {
  88.         if ($this->myde_page != $this->myde_page_count) {
  89.             return "<a href='" . $this->page_replace($this->myde_page + 1) . "' title='下一页'>下一页</a>";
  90.         } else {
  91.             return"<p>下一页</p>";
  92.         }
  93.     }

  94.     //尾页
  95.     private function myde_last() {
  96.         if ($this->myde_page != $this->myde_page_count) {
  97.             return "<a href='" . $this->page_replace($this->myde_page_count) . "' title='尾页'>尾页</a>";
  98.         } else {
  99.             return "<p>尾页</p>";
  100.         }
  101.     }

  102.     //输出
  103.     public function myde_write($id = 'page') {
  104.         $str = "<div id=" . $id . ">";
  105.         $str.=$this->myde_home();
  106.         $str.=$this->myde_prev();
  107.         if ($this->myde_i > 1) {
  108.             $str.="<p class='pageEllipsis'>...</p>";
  109.         }
  110.         for ($i = $this->myde_i; $i <= $this->myde_en; $i++) {
  111.             if ($i == $this->myde_page) {
  112.                 $str.="<a href='" . $this->page_replace($i) . "' title='第" . $i . "页' class='cur'>$i</a>";
  113.             } else {
  114.                 $str.="<a href='" . $this->page_replace($i) . "' title='第" . $i . "页'>$i</a>";
  115.             }
  116.         }
  117.         if ($this->myde_en < $this->myde_page_count) {
  118.             $str.="<p class='pageEllipsis'>...</p>";
  119.         }
  120.         $str.=$this->myde_next();
  121.         $str.=$this->myde_last();
  122.         $str.="<p class='pageRemark'>共<b>" . $this->myde_page_count .
  123.                 "</b>页<b>" . $this->myde_total . "</b>条数据</p>";
  124.         $str.="</div>";
  125.         return $str;
  126.     }

  127. }

  128. ?>
复制代码

分页演示地址:http://www.sucaihuo.com/php/223.html


转载于:https://www.cnblogs.com/ZDPPU/p/5923239.html

相关文章:

  • 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。...
  • fgets()函数读取键盘,去掉换行符或丢弃多余的字符
  • 解决Only a type can be imported. com.mysql.jdbc.Connection resolves to a package的报错问题
  • Java_I/O输入输出_使用输入输出流读取文件,将一段文字加密后存入文件,然后读取,将加密前与后的文件输出...
  • Servlet类源码说明
  • 连接 insance 到 vlan101 - 每天5分钟玩转 OpenStack(97)
  • 15、限定词
  • Automated Memory Analysis
  • 5.openstack之mitaka搭建计算节点
  • 改变Chrome浏览器主程序_缓存_个人信息路径
  • Xtreme9.0 - Car Spark 动态规划
  • java 计算距离现在几分,几个小时,几天
  • pragma
  • VC/MFC使用OLE操作 EXCEL
  • js定时器的使用(实例讲解)
  • [译]如何构建服务器端web组件,为何要构建?
  • Angular2开发踩坑系列-生产环境编译
  • Node 版本管理
  • pdf文件如何在线转换为jpg图片
  • python docx文档转html页面
  • uva 10370 Above Average
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 每天10道Java面试题,跟我走,offer有!
  • 前端面试题总结
  • 以太坊客户端Geth命令参数详解
  • 阿里云移动端播放器高级功能介绍
  • !!Dom4j 学习笔记
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (04)odoo视图操作
  • (1)(1.11) SiK Radio v2(一)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Git) gitignore基础使用
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (排序详解之 堆排序)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转)socket Aio demo
  • (转)关于多人操作数据的处理策略
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net 7 上传文件踩坑
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET下ASPX编程的几个小问题
  • .net下简单快捷的数值高低位切换
  • .NET中winform传递参数至Url并获得返回值或文件
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化