欢迎光临杨雨的个人博客站!

杨雨个人网站-杨雨个人博客-杨照佳

杨雨个人博客网站

关注互联网和搜索引擎的个人博客网站

首页 > WEB开发 > PHP >

行使PHP将长文章分页

发布时间:2016-11-26  编辑:杨雨个人博客网站   点击:   

当文章内容拿手时,为了利便阅读和页面展示我们一样平常将内容分页来表现。而一样平常分页处理赏罚是在靠山宣布文章的时辰就将提交的内容天生多个分页后的静态文件。本文我们团结实例来讲授回收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();
?>

值得留意的是,行使同一UTF-8的文件编码,会让你的编码事变越发顺畅。

本文地址:http://itbyc.com/php/13355.html
转载请注明出处。
分享是一种快乐,也是一种美德:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
博客首页 | WEB开发 | 网站运营 | CMS使用教程 滇ICP备14002061号-1