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版(1)
Oct 09 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 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
来自PHP.NET的入门教程
2006/10/09 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
python中偏函数partial用法实例分析
2015/07/08 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
python文件路径操作方法总结
2020/12/21 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
实习鉴定范文
2013/12/19 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
十二生肖观后感
2015/06/12 职场文书
同意转租证明
2015/06/24 职场文书
财务管理制度范本
2015/08/04 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript