诚信为本,市场在变,诚信永远不变... 设为首页|加入收藏|联系我们
24小时咨询热线

020-88888888

新闻资讯NEWS

联系我们contact us

地址: 广东省广州市

座机:020-88888888

联系人:李生

手机:13888888888

邮箱:@online-kaiyun-247.com

新闻资讯

您现在的位置是: 首页 > 新闻资讯

PHP实现新闻分页的方法及代码示例,含自动和手动分页

面对一篇篇幅颇长的文章之际,怎样方可使其清晰明了易于阅读呢?内容进行分页乃是一种常见且具成效的解决办法。

手动分页的原理与应用

那种手动进行分页的情况,是需要内容编辑者在撰写内容的时候,主动地在那些需要进行分页的位置处,插入特定格式的分页标记,就比如说,在文章当中键入像“{page}”这样子专门的符号。而等到当相应的内容被提交到后端系统之后,程序会依据既定规则识别出来这些在其内部预设好的标记点,然后根据这些标记点,把一篇篇幅较长的文章切割成好多相互独立的页面。

以这种方式而言,其核心优势在于,分页位置全然经由人工操控,精准 degree 颇高,可确保每一个页面之中的内容于逻辑层面相对完备。然而在另一方面,它的缺点亦是相当彰显的,意即那些从事编辑工作的人员所承担的工作负担较为沉重,务必要逐篇展开审阅以及插入标记的操作,并不利于去处理数量庞大的内容。

自动分页的工作机制

自动分页是由程序算法来主导的,系统会依照预设的规则,像是每页要达到固定的字符数量,或者遇到特定的HTML标签(比如‘ ) 。

一旦到达指定条件时,便会自行启动分页操作。此方式并不需人工去进行干涉,而是依靠PHP等后端语言来进行批量处理,进而能够极为有效地提高内容发布的效率。

达成自动分页的重点在于分页逻辑的严密性,程序务必要能够聪慧辨认且准确处置各种HTML标签,防止分页之际割裂标签致使页面布局紊乱。这对代码的稳固性提出了比较高的要求,是技术达成里的主要难题。

前端分页的实现与体验

前置页面分页是一种全然不一样的思考之路,于页面加载之际,是一次性把所有文章内容从服务器那儿获取过来,接着借助JavaScript,在浏览器一端开展动态的分段以及进行展示,当用户点击页码之时,JS脚本会操控显示与之对应的内容段落,并不需要再次向服务器请求全新页面。

采用这种方式,用户体验极为流畅,原因在于于切换页面之时的网络请求不会带来延迟以及刷新感。然而,它需要在初始加载之际传输全部数据,一旦文章长度极长,那么就有可能会对首屏加载速度造成影响,它更加适宜中等长度的内容展示场景。

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("", "", "
", "
"
, "”。", "。", ".", "!", "……", "?", ","); $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.= "".$i." "
; }else{ $str.= ".$this->url.$i."">".$this->url.$i."">.$i." "; } } 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; } } ?>

PHP分页类的设计思路

于实际的PHP项目里,我们常常会去封装一个专门用以针对分页进行处理的类,以此来将逻辑予以统一,这个类一般情况下是涵盖了诸如解析内容、识别分页符、计算总的页数以及当前页片段等这一类核心方法,而一个良好的分页类是能够兼顾自动以及手动这两种模式的。

类内部在设计时,会优先检测用户插入的手动分页符,像{}这种。若存在,就按手动标记来分割。若不存在,便启动自动分页算法,按字数或者标签去分割。如此这般的设计,既保证了灵活性,又提供了自动化的后备方案。

调用分页类的实践步骤

于具体运用阶段,咱们首要得去获取有待分页的初始内容,其数据源头或许是文本文件,又或者是数据库表的字段呢,再不然就是表单提交的长文本。随后,对分页类进行实例化弄操作,并且把初始内容给传输进去予以处理。接着下来,依据用户所请求的当下页码参数,从该类里面拿到与之对应的那部分内容片段。

我们要输出当前页内容,此外,还得生成一个供用户导航的分页条,这个分页条呀,通常含有“上一页”、“下一页”以及数字页码链接,它的HTML结构呢,是由分页类按照总页数和当前页自动计算生成的。

分页实践的注意事项

于实际开发里头,维持统一的字符编码相当关键,大力建议自始至终运用UTF - 8编码。如此能够完全防止因编码不一致致使的中文乱码、分页位置计算有误等状况。从文件存储开始,历经数据库,直至PHP程序输出,均需保证编码环境统一。

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(); 
?> 

还有一个要点在于,要考量分页对于内容语义完整性的保护情况,特别是在进行自动分页这个情况下,对于算法而言,应该防止在表格、代码块或者一个完整单词的中间位置截断内容,只有妥善处理好这些细节,才能够使得分页功能既具备高效性又拥有友好性。

当你针对网站或者系统去达成分页功能之际,碰到的最为棘手的难题,是分页算法自身,还是分页样式同网站整体设计的相互融合呢?欢迎于评论区去分享你的经验以及见解。

在线客服

关注我们 在线咨询 投诉建议 返回顶部