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 Ctemplate引擎开发相关内容
Mar 03 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
php json与xml序列化/反序列化
Oct 28 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
php数组查找函数总结
Nov 18 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
小学庆六一活动方案
2014/02/28 职场文书
三年级学生评语
2014/04/23 职场文书
大学学习计划书范文
2014/05/02 职场文书
高中同学会活动方案
2014/08/14 职场文书
护林员个人总结
2015/03/04 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang