分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为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." &nbsp; "; 
 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分页功能

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

功能强大的php分页函数的更多相关文章

  1. ios – UIScrollView的平滑自定义分页

    我在UIScrollView中有两个(可能更多)视图,并希望使用分页.当我尝试使用UIScrollView的默认分页选项时出现问题,因为视图具有不同的宽度,无法正确分页.所以我已经实现了一个有效的自定义分页代码.但是,当滚动较慢时,它不会按预期运行.(它回到没有动画的原始位置.)以下是我目前通过uiscrollviewdelegate进行自定义分页的方法我想要的是:是)我有的:解决方法尝试下面的自

  2. ios – 使用子视图控制器分页滚动视图

    使用分页实现水平滚动视图的最佳做法是什么,每页有一个视图控制器?由于iOS5具有用于视图控制器容器/包含的API,因此PageControl示例仍然是实现此功能的最佳方式吗?

  3. 可可触摸 – 启用预览和分页的UICollectionView

    在AppStore中显示搜索结果时,我正在尝试模仿苹果公司的功能.(参考:http://searchengineland.com/apple-app-search-shows-only-one-result-at-a-time-133818)它显示像卡中的详细应用程序信息,并且它被分页.当中间的一个活动卡片和滚动视图的分页行为仍然完整时,我被困在如何使上一张和第二张卡片显示.我已经尝试使用UICo

  4. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  5. ios – 启用了内容插入的UIScrollView分页工作很奇怪

    我创建了具有内容插入的UIScrollView.第一次,scrollView.contentOffset.x为-160.0但是奇怪的问题是当我点击scrollView(黄色区域)时,内容偏移x值将重置为0并显示为这样.我尝试过几次,但是点击滚动视图会将内容偏移量重置为0.我该如何防止这种情况?解决方法UIScrollView分页通过滚动与scrollView宽度相同的页面(在您的情况下为480个宽

  6. UIKit框架-高级控件Swift版本: 10.UIWebView方法/属性详解

    前面我们已经讲解完了UINavigationController的一些常用属性以及方法,现在让我们来看看一个关于网络的UIWebView.1.UIWebView的常用属性常用类型2.UIWebView的代理方法3.代码示范首先我们要使用storyBoard布局界面关联控件遵守代理协议自定义UIWebVIew实现代理方法在ViewDidLoad方法中实现PS:UIWebView继承与UIView,并

  7. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  8. swift+storyboard+UIImageview入门

    更新记录:该Storyboard教程由CarolineBegbie更新iOS8和Swift相关内容。Storyboard是最先在iOS5引入的一项振奋人心的特性,大幅缩减构建App用户界面所需的时间。要介绍Storyboard是什么,我打算从这张图讲起。这就是使用Storyboard的力量。Storyboard通过新的原型表项和静态表项特性,让处理表视图的工作更加轻松。Storyboard使自动布局更易用。接下来我们看一下Storyboard,点击项目浏览器中的Main.storyboard就可以在Int

  9. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

  10. 使用RxSwift进行分页API调用

    如何实现这一点的任何建议将非常感谢…

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部