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 相关文章推荐
paypal即时到账php实现代码
Nov 28 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
10个简化PHP开发的工具
Dec 25 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
php解析非标准json、非规范json的方式实例
May 10 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
Python实现的tab文件操作类分享
2014/11/20 Python
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
企业安全生产责任书
2014/04/14 职场文书
学生会工作感言
2015/08/07 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
SpringBoot快速入门详解
2021/07/21 Java/Android
Linux安装Docker详细教程
2022/07/07 Servers