php长文章自动/手动分页类(thinkphp)

作者:寇玉鑫 , 分类:技术分享 , 浏览:17686 , 评论:9 请在这里放置你的在线分享代码

    对于很多程序没有内容页分页的情况,我在网上找了很多方法,经过测试和修改,终于可以达成手动和自动分页的功能,前面在写 长文章内容页分页代码,无刷新js翻页效果 时也说过后面会发布php翻页方法的。本代码是摘自网络上的一些代码,博主在自己的thinkphp内核的网站上测试成功。其他程序应该可以用的。

  首先在控制文件中加入以下代码

<?php    
/*  
*  长文章分页类  
*  @package    cutpage  
*  @author     yytcpt(无影)  
*  @version    2008-03-27  
*  @copyrigth  http://www.d5s.cn/    
*/  
    class cutpage{    
        var $pagestr;       //被切分的内容    
        var $pagearr;       //被切分文字的数组格式    
        var $sum_word;      //总字数(UTF-8格式的中文字符也包括)    
        var $sum_page;      //总页数    
        var $page_word;     //一页多少字    
        var $cut_tag;       //自动分页符    
        var $cut_custom;    //手动分页符    
        var $ipage;         //当前切分的页数,第几页    
        var $url;    
        function __construct(){    
            $this->page_word = 1000;    
            $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;    
        }    
        //统计总字数    
        function get_page_word(){    
            $this->sum_word = $this->strlen_utf8($this->pagestr);    
            return $this->sum_word;    
        }    
        /*  统计UTF-8编码的字符长度  
         *  一个中文,一个英文都为一个字  
         */  
        function strlen_utf8($str){    
           $i = 0;    
           $count = 0;    
           $len = strlen ($str);    
           while ($i < $len){    
               $chr = ord ($str[$i]);    
               $count++;    
               $i++;    
               if ($i >= $len)    
                   break;    
               if ($chr & 0x80){    
                   $chr <<= 1;    
                   while ($chr & 0x80) {    
                       $i++;    
                       $chr <<= 1;    
                   }    
               }    
           }    
           return $count;    
        }    
        //设置自动分页符号    
        function set_cut_tag($tag_arr=array()){    
            $this->cut_tag = $tag_arr;    
        }    
        //设置手动分页符    
        function set_cut_custom($cut_str){    
            $this->cut_custom = $cut_str;    
        }    
        function show_cpage($ipage=0){    
            $this->cut_str();    
            $ipage = $ipage ? $ipage:$this->ipage;    
            return $this->pagearr[$ipage];    
        }    
        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;    
        }    
        //显示上一条,下一条    
        function show_prv_next(){    
            $this->set_url();    
            if ($this->sum_page>1 and $this->ipage<$this->sum_page){    
                $str = "<a href='".$this->url.($this->ipage+1)."'>下一页</a> ";    
            }    
            if ($this->sum_page>1 and $this->ipage>1){    
                $str.= "<a href='".$this->url.($this->ipage-1)."'>上一页</a>";    
            }    
            return $str;    
        }    
        function show_page_select(){    
            if ($this->sum_page>1){    
                $str = "   <select onchange=/"location.href=this.options[this.selectedIndex].value/">";    
                for ($i=1; $i<=$this->sum_page; $i++){    
                    $str.= "<option value='".$this->url.$i."' ".(($this->ipage)==$i ? " selected='selected'":"").">第".$i."页</option>";    
                }    
                $str.= "</select>";    
            }    
            return $str;    
        }    
        function show_page_select_wap(){    
            if ($this->sum_page>1){    
                $str = "<select ivalue='".($this->ipage-1)."'>";    
                for ($i=1; $i<=$this->sum_page; $i++){    
                    $str.= "<option onpick='".$this->url.$i."'>第".$i."节</option>";    
                }    
                $str.= "</select>";    
            }    
            return $str;    
        }    
        function set_url(){    
            parse_str($_SERVER["QUERY_STRING"], $arr_url);    
            unset($arr_url["ipage"]);    
            if (emptyempty($arr_url)){    
                $str = "ipage=";    
            }else{    
                $str = http_build_query($arr_url)."&ipage=";    
            }    
            $this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str;    
        }    
    }    
?>

   实例代码:请以UTF-8的文件编码进行测试。然后在前台模板里增加以下代码

<?php 
    $content = html_entity_decode($article['content']);      
    $ipage = $_GET["ipage"]? intval($_GET["ipage"]):1;      
    $CP = new cutpage();      
    $CP->pagestr = $content;      
    $CP->cut_str();   
	echo $CP->pagearr[$ipage-1]."<div class='pagebars'>"; 
    echo $CP->show_prv_pre();
    echo $CP->show_page_select();	
    echo $CP->show_prv_next()."</div>"; 
    	?>

注意基中的代码

html_entity_decode($article['content'])

 这段代码是您程序中内容标签,也就是把第二段代码替换,您的内容标签,把其中第三段的内容换成您的内容代码。

 另外对于分页码的样式可以根据代码中的html标签自定义。

 

发表评论

必填

选填

选填

◎欢迎参与讨论,博客大全免费收录

已有9位网友发表了看法:

1#boke123导航  2015-06-06 17:39:30 回复该评论
我都是手动分页的,不过主题集成后分页符,直接插入即可
1#寇玉鑫  2015-06-08 14:54:23 回复该评论
有上结程序没有分页,这个可以用
2#boke123导航  2015-06-06 23:16:32 回复该评论
博主,您好,您在本站合作博客【子穹斋】周评论排行榜有效读者中排列第3名,根据我们推荐原则,贵站已被本站推荐为活跃博客,谢谢支持!
2#寇玉鑫  2015-06-08 14:54:06 回复该评论
谢谢
3#泛宝汇博客  2015-06-07 22:28:58 回复该评论
前几天看到一篇SEO说尽可能不要搞分页,不知道影响大不大哦。
3#寇玉鑫  2015-06-08 14:53:39 回复该评论
这个要看情况,如何长文章,有吸引力的文章分页不但可以增加pv还可以提高用户访问深度,对SEO有好除,但是如何很短的文章。不要分页。用户看一句翻一页太麻烦
4#宁波高校网  2015-06-07 23:35:30 回复该评论
好东西,感谢分享,分页代码很珍贵呢!
5#威客百科  2015-06-08 10:03:38 回复该评论
这个确实是良心的说
5#寇玉鑫  2015-06-08 14:53:59 回复该评论
谢谢
寇玉鑫自媒体