功能强大的php分页函数


Posted in PHP onJuly 20, 2016

分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数。

文章内容分页主要有两个办法:

办法一、按字数控制进行分页

按字数分页办法简单易用,但效果不好.

大致思想:首先、设定每页能容纳的最大字数,然后、计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数,这样整个分页的准备工作就已经做好了.

具体到每一页的显示内容可以通过内容截取来实现,比如:页容纳500字,文章内容有2200字,那么当页面传递page=2时应该显示第501至1000之间的内容.

这种办法简单,但显示时可能会遇到麻烦,文章内容通常伴有HTML标签,进行内容切割时实现HTML标签的闭合有一定难度,如果这个工作没做好,那么分页后的效果显然也是不好的.

办法二、通过分页符进行分页

通过分页符进行分页比起第一种办法要更为理想。

大致思想:在编辑文章内容时往内容里面插入分页符(如:<hr class="page">),在文章显示时对文章内容进行分割,每一部分表示一个页的内容,通过传递参数控制显示第几页。

这种办法比较人性化,毕竟通过人工控制出来的分页截取的内容更符全我们的思维,而且可以一定程度上避免HTML标签不闭合的情形。

分页显示:分页显示是将大批量的数据分批发送到客户端的重要手段之一,通常是将数据库中的结果集人为的分成一段一段的来显示.

分类:PHP分页分为列表分页内容分页,不管是列表分页还是内容分页,基本原理是一样的,将数据分批发送到客户端.

pager.class.php:这是一个简单的PHP分页显示类,目前支持两种分页模式,一种是最简单的普通分页模式[首页] [上页] [下页] [尾页]模式,另一种是经典分页模式,即:[1][2][3][4][5][6][7][8][9][10][下一页][尾页].

使用方法,代码如下:

require_once 'pager.class.php'; 
$pager = new pager($totalPage,$currentPage); // $pager对象 
echo $pager->showpager(); // 输出分页 
此分页显示类的构造函数 
/* 
@total_page 总页数 
@current_num 当前页 
@sub_pages 每次显示的页数 
@subPage_link 每个分页的链接 
@subPage_type 分页模式 
当@subPage_type=1的时候为普通分页模式 
如: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] 
当@subPage_type=2的时候为经典分页样式 
如: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] 
*/

代码如下:

pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2)

上述说的PHP分页的两种类别(列表分页和内容分页),相信列表分页对大家并不陌生,对于内容分页,常用的方法是以分页符的形式(比如: <hr class="pager"> )将内容分割成多段,求出总页数,用当前页码去获取分页显示列表,代码如下:

<?php 
/** 
 * 示例: 
 * <?php 
 * require_once("pager.class.php"); 
 * $subPages=new pager($totalPage,$currentPage); 
 * echo $subPages->showpager(); 
 * ?> 
 * */ 
class pager{ 
 var $each_disNums;//每页显示的条目数 
 var $nums;//总条目数 
 var $current_page;//当前被选中的页 
 var $sub_pages;//每次显示的页数 
 var $pageNums;//总页数 
 var $page_array = array();//用来构造分页的数组 
 var $subPage_link;//每个分页的链接 
 var $subPage_type;//显示分页的类型 
 var $_lang = array( 
 'index_page' => '首页', 
 'pre_page' => '上一页', 
 'next_page' => '下一页', 
 'last_page' => '尾页', 
 'current_page' => '当前页:', 
 'total_page' => '总页数:', 
 'current_show' => '当前显示:', 
 'total_record' => '总记录数:' 
 ); 
 /* 
 __construct是SubPages的构造函数,用来在创建类的时候自动运行. 
 @total_page 总页数 
 @current_num 当前被选中的页 
 @sub_pages 每次显示的页数 
 @subPage_link 每个分页的链接 
 @subPage_type 显示分页的类型 
 
 当@subPage_type=1的时候 www.phpfensi.com 为普通分页模式 
 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] 
 当@subPage_type=2的时候为经典分页样式 
 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] 
 */ 
 function __construct($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){ 
 $this->pager($total_page,$current_page,$sub_pages,$subPage_link,$subPage_type); 
 } 
 
 function pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){ 
 if(!$current_page){ 
 $this->current_page=1; 
 }else{ 
 $this->current_page=intval($current_page); 
 } 
 $this->sub_pages=intval($sub_pages); 
 $this->pageNums=ceil($total_page); 
 if($subPage_link){ 
 if(strpos($subPage_link,'?page=') === false AND strpos($subPage_link,'&page=') === false){ 
 $subPage_link .= (strpos($subPage_link,'?') === false ? '?' : '&') . 'page='; 
 } 
 } 
 $this->subPage_link=$subPage_link ? $subPage_link : $_SERVER['PHP_SELF'] . '?page='; 
 $this->subPage_type = $subPage_type; 
 } 
 
 /* 
 show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页 
 */ 
 function showpager(){ 
 if($this->subPage_type == 1){ 
 return $this->pagelist1(); 
 }elseif ($this->subPage_type == 2){ 
 return $this->pagelist2(); 
 } 
 } 
 
 
 /* 
 用来给建立分页的数组初始化的函数。 
 */ 
 function initArray(){ 
 for($i=0;$i<$this->sub_pages;$i++){ 
 $this->page_array[$i]=$i; 
 } 
 return $this->page_array; 
 } 
 
 
 /* 
 construct_num_Page该函数使用来构造显示的条目 
 即使:[1][2][3][4][5][6][7][8][9][10] 
 */ 
 function construct_num_Page(){ 
 if($this->pageNums < $this->sub_pages){ 
 $current_array=array(); 
 for($i=0;$i<$this->pageNums;$i++){ 
 $current_array[$i]=$i+1; 
 } 
 }else{ 
 $current_array=$this->initArray(); 
 if($this->current_page <= 3){ 
 for($i=0;$i<count($current_array);$i++){ 
 $current_array[$i]=$i+1; 
 } 
 }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){ 
 for($i=0;$i<count($current_array);$i++){ 
 $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i; 
 } 
 }else{ 
 for($i=0;$i<count($current_array);$i++){ 
 $current_array[$i]=$this->current_page-2+$i; 
 } 
 } 
 } 
 
 return $current_array; 
 } 
 
 /* 
 构造普通模式的分页 
 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] 
 */ 
 function pagelist1(){ 
 $subPageCss1Str=""; 
 $subPageCss1Str.= $this->_lang['current_page'] . $this->current_page." / " .$this->pageNums."   "; 
 if($this->current_page > 1){ 
 $firstPageUrl=$this->subPage_link."1"; 
 $prewPageUrl=$this->subPage_link.($this->current_page-1); 
 $subPageCss1Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> "; 
 $subPageCss1Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> "; 
 }else { 
 $subPageCss1Str.="{$this->_lang['index_page']} "; 
 $subPageCss1Str.="{$this->_lang['pre_page']} "; 
 } 
 
 if($this->current_page < $this->pageNums){ 
 $lastPageUrl=$this->subPage_link.$this->pageNums; 
 $nextPageUrl=$this->subPage_link.($this->current_page+1); 
 $subPageCss1Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> "; 
 $subPageCss1Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> "; 
 }else { 
 $subPageCss1Str.="{$this->_lang['next_page']} "; 
 $subPageCss1Str.="{$this->_lang['last_page']} "; 
 } 
 
 return $subPageCss1Str; 
 } 
 
 
 /* 
 构造经典模式分页 
 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] 
 */ 
 function pagelist2(){ 
 $subPageCss2Str=""; 
 $subPageCss2Str.=$this->_lang['current_page'] . $this->current_page."/" . $this->pageNums." "; 
 
 if($this->current_page > 1){ 
 $firstPageUrl=$this->subPage_link."1"; 
 $prewPageUrl=$this->subPage_link.($this->current_page-1); 
 $subPageCss2Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> "; 
 $subPageCss2Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> "; 
 }else { 
 $subPageCss2Str.="{$this->_lang['index_page']} "; 
 $subPageCss2Str.="{$this->_lang['pre_page']} "; 
 } 
 
 $a=$this->construct_num_Page(); 
 for($i=0;$i<count($a);$i++){ 
 $s=$a[$i]; 
 if($s == $this->current_page ){ 
 $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]"; 
 }else{ 
 $url=$this->subPage_link.$s; 
 $subPageCss2Str.="[<a href='$url'>".$s."</a>]"; 
 } 
 } 
 
 if($this->current_page < $this->pageNums){ 
 $lastPageUrl=$this->subPage_link.$this->pageNums; 
 $nextPageUrl=$this->subPage_link.($this->current_page+1); 
 $subPageCss2Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> "; 
 $subPageCss2Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> "; 
 }else { 
 $subPageCss2Str.="{$this->_lang['next_page']} "; 
 $subPageCss2Str.="{$this->_lang['last_page']} "; 
 } 
 return $subPageCss2Str; 
 } 
 
 
 /* 
 __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。 
 */ 
 function __destruct(){ 
 unset($each_disNums); 
 unset($nums); 
 unset($current_page); 
 unset($sub_pages); 
 unset($pageNums); 
 unset($page_array); 
 unset($subPage_link); 
 unset($subPage_type); 
 } 
} 
?>

好了我们只要把它保存在一个文件,在其它地方要使用时直接调用就可以了,非常好用的一个内容或记录分页类函数哦,这也算是一个入门级别的php教程吧。

精彩专题分享:php分页功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
PHP实现递归无限级分类
Oct 22 PHP
php生成酷炫的四个字符验证码
Apr 22 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
java解析json方法总结
May 16 PHP
Yii2框架自定义类统一处理url操作示例
May 25 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 #PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 #PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 #PHP
无需数据库在线投票调查php代码
Jul 20 #PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 #PHP
php自定义函数实现二维数组排序功能
Jul 20 #PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 #PHP
You might like
php跨域cookie共享使用方法
2014/02/20 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
局火灾防控工作方案
2014/05/25 职场文书
应届大学生自荐书
2014/06/17 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
维稳工作承诺书
2015/01/20 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis