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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
递归列出所有文件和目录
Oct 09 PHP
php引用传值实例详解学习
Nov 06 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
PHP生成树的方法
Jul 28 PHP
php需登录的文件上传管理系统
Mar 21 PHP
php中bind_param()函数用法分析
Mar 28 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 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是否有效的几种方法小结
2011/10/08 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
js中的string.format函数代码
2020/08/11 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
Python subprocess模块详细解读
2018/01/29 Python
python实现飞机大战微信小游戏
2020/03/21 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
PHP开发的一般流程
2013/08/13 面试题
夏季奶茶店创业计划书
2014/01/16 职场文书
七年级数学教学反思
2014/01/22 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
新农村建设典型材料
2014/05/31 职场文书
齐云山导游词
2015/02/06 职场文书
离婚案件原告代理词
2015/05/23 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL