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 相关文章推荐
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP中文编码小技巧
Dec 25 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
php实现微信企业付款到个人零钱功能
Oct 09 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
js 判断 enter 事件
2009/02/12 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
了解javascript中的Dom操作
2019/05/27 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
python检测远程服务器tcp端口的方法
2015/03/14 Python
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python实现动态循环输出文字功能
2020/05/07 Python
护理毕业生自我鉴定
2014/02/11 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
团日活动总结书
2014/05/08 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
Github 使用python对copilot做些简单使用测试
2022/04/14 Python
深入理解pytorch库的dockerfile
2022/06/10 Python