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读取IMAP邮件
Oct 09 PHP
php 函数中使用static的说明
Jun 01 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
PHP函数getenv简介和使用实例
May 12 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
php判断访问IP的方法
Jun 19 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
twig里使用js变量的方法
Feb 05 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
PHP 出现 http500 错误的解决方法
Mar 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue中如何使用ztree
2018/02/06 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
深入学习Python中的装饰器使用
2016/06/20 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
python3.4中清屏的处理方法
2020/07/06 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
大型主题婚礼活动策划方案
2014/09/15 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
校车司机安全责任书
2015/05/11 职场文书
公司联欢会主持词
2015/07/04 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS