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 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
php代码审计比较有意思的例子
May 07 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
PHP示例演示发送邮件给某个邮箱
Apr 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分页显示制作详细讲解
2006/12/05 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
Python获取当前时间的方法
2014/01/14 Python
python求斐波那契数列示例分享
2014/02/14 Python
python文件操作整理汇总
2014/10/21 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
python实现图片彩色转化为素描
2019/01/15 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
《尊严》教学反思
2014/02/11 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
法律专业自荐信
2014/06/03 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
Python常遇到的错误和异常
2021/11/02 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android