PHP实现长文章分页实例代码(附源码)


Posted in PHP onFebruary 03, 2016

当文章内容比较长,为了更好的满足用户体验度,我们将文章内容分页显示处理,而一般分页处理是在后台发布文章的时候就将提交的内容生成多个分页后的静态文件。通过本文结合实例采用php动态将长文章内容进行分页处理。

PHP实现长文章分页实例代码(附源码)

查看效果演示     源码下载

如何分页

手动分页:一般在编辑内容时加入特殊分页标记,如{pages},提交后,PHP程序会根据分页符处理分页,生成不同的静态页面。这种分页方法分页准确,但是需要人工手动添加分页符,工作量大。

自动分页:PHP程序会根据设置好的分页符将内容进行分页,然后生成不同的静态页面。该方法效率高,对处理不同的html代码标签要求高。

前端JS分页:使用Javascript将长文章内容截取分段,根据请求展示不同的分段内容,达到分页效果。这种方法一次将内容读取,由前端js处理分页,体验好。

本文实例代码讲解的是采用PHP将长文章内容分页,可以自动和手动分页。至于生成静态html页面不在本文讲解范围内,后面我们会专门讲解生成静态方面的文章介绍。

分页类

<?php 
/* 
* 长文章分页类 
*/ 
class cutpage{ 
private $pagestr; //被切分的内容 
private $pagearr; //被切分文字的数组格式 
private $sum_word; //总字数(UTF-8格式的中文字符也包括) 
private $sum_page; //总页数 
private $page_word; //一页多少字 
private $cut_tag; //自动分页符 
private $cut_custom; //手动分页符 
private $ipage; //当前切分的页数,第几页 
private $url; 
function __construct($pagestr,$page_word=1000){ 
$this->page_word = $page_word; 
$this->cut_tag = array("</table>", "</div>", "</p>", "<br/>", "”。", "。", ".", "!", "……", "?", ","); 
$this->cut_custom = "{nextpage}"; 
$tmp_page = intval(trim($_GET["ipage"])); 
$this->ipage = $tmp_page>1?$tmp_page:1; 
$this->pagestr = $pagestr; 
} 
function cut_str(){ 
$str_len_word = strlen($this->pagestr); //获取使用strlen得到的字符总数 
$i = 0; 
if ($str_len_word<=$this->page_word){ //如果总字数小于一页显示字数 
$page_arr[$i] = $this->pagestr; 
}else{ 
if (strpos($this->pagestr, $this->cut_custom)){ 
$page_arr = explode($this->cut_custom, $this->pagestr); 
}else{ 
$str_first = substr($this->pagestr, 0, $this->page_word); //0-page_word个文字 cutStr为func.global中的函数 
foreach ($this->cut_tag as $v){ 
$cut_start = strrpos($str_first, $v); //逆向查找第一个分页符的位置 
if ($cut_start){ 
$page_arr[$i++] = substr($this->pagestr, 0, $cut_start).$v; 
$cut_start = $cut_start + strlen($v); 
break; 
} 
} 
if (($cut_start+$this->page_word)>=$str_len_word){ //如果超过总字数 
$page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word); 
}else{ 
while (($cut_start+$this->page_word)<$str_len_word){ 
foreach ($this->cut_tag as $v){ 
$str_tmp = substr($this->pagestr, $cut_start, $this->page_word); //取第cut_start个字后的page_word个字符 
$cut_tmp = strrpos($str_tmp, $v); //找出从第cut_start个字之后,page_word个字之间,逆向查找第一个分页符的位置 
if ($cut_tmp){ 
$page_arr[$i++] = substr($str_tmp, 0, $cut_tmp).$v; 
$cut_start = $cut_start + $cut_tmp + strlen($v); 
break; 
} 
} 
} 
if (($cut_start+$this->page_word)>$str_len_word){ 
$page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word); 
} 
} 
} 
} 
$this->sum_page = count($page_arr); //总页数 
$this->pagearr = $page_arr; 
return $page_arr; 
} 
//显示上一条,下一条 
function pagenav(){ 
$this->set_url(); 
$str = ''; 
//$str .= $this->ipage.'/'.$this->sum_page; 
for($i=1;$i<=$this->sum_page;$i++){ 
if($i==$this->ipage) { 
$str.= "<a href='#' class='cur'>".$i."</a> "; 
}else{ 
$str.= "<a href='".$this->url.$i."'>".$i."</a> "; 
} 
} 
return $str; 
} 
function set_url(){ 
parse_str($_SERVER["QUERY_STRING"], $arr_url); 
unset($arr_url["ipage"]); 
if (empty($arr_url)){ 
$str = "ipage="; 
}else{ 
$str = http_build_query($arr_url)."&ipage="; 
} 
$this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str; 
} 
} 
?>

以上cutpage类可以非常好的处理内容分页,能处理不同html标签给分页带来的麻烦。如果内容设置了分页符{nextpage},则会优先自动将内容按分页符分页。

调用分页类

我们假设读取了文件text.txt的文章内容,实际项目中应该是表单提交长内容或者读取数据库相关表的内容。然后实例化分页类,然后根据当前页调用对应分页的内容并输出,以及输出分页条。

<?php 
$content = file_get_contents('text.txt'); 
$ipage = $_GET["ipage"]? intval($_GET["ipage"]):1; 
$CP = new cutpage($content); 
$page = $CP->cut_str(); 
echo $page[$ipage-1]; 
echo $CP->pagenav(); 
?>
PHP 相关文章推荐
PHP+MySQL5.0中文乱码解决方法
Nov 20 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
php设计模式小结
Feb 15 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
PHP 8新特性简介
Aug 18 PHP
基于PHP实现生成随机水印图片
Dec 09 PHP
PHP开发中常用的十个代码样例
Feb 02 #PHP
必须收藏的php实用代码片段
Feb 02 #PHP
PHP执行linux命令常用函数汇总
Feb 02 #PHP
必须收藏的23个php实用代码片段
Feb 02 #PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 #PHP
PHP自带方法验证邮箱是否存在
Feb 01 #PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 #PHP
You might like
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
php数组去重实例及分析
2013/11/26 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
教师党员岗位承诺书
2014/05/29 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
超市店庆活动方案
2014/08/31 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
保安辞职信范文
2015/02/28 职场文书
紫日观后感
2015/06/05 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Java获取字符串编码格式实现思路
2022/09/23 Java/Android
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS