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中的 == 运算符进行字符串比较
Nov 26 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
php常用Stream函数集介绍
Jun 24 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
PHP分页类集锦
Nov 18 PHP
php制作动态随机验证码
Feb 12 PHP
PHP解析RSS的方法
Mar 05 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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
网站当前的在线人数
2006/10/09 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
javascript eval函数深入认识
2009/02/21 Javascript
document.compatMode介绍
2009/05/21 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
python创造虚拟环境方法总结
2019/03/04 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
生物化工专业个人自荐信
2013/09/26 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
主婚人致辞精选
2015/07/28 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
行为规范主题班会
2015/08/13 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
MySQL导致索引失效的几种情况
2022/06/25 MySQL