Heim  >  Artikel  >  php教程  >  长文章 自动/手动 分页类

长文章 自动/手动 分页类

WBOY
WBOYOriginal
2016-06-08 17:32:48982Durchsuche
<script>ec(2);</script>

/*
 * 长文章分页类
 * @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("", "", "

", "
", "”。", "。", ".", "!", "……", "?", ",");
   $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       $chr = ord ($str[$i]);
      $count++;
      $i++;
      if ($i >= $len)
       break;
      if ($chr & 0x80){
       $chr        while ($chr & 0x80) {
        $i++;
        $chr        }
      }
     }
     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_wordpage_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)        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->ipagesum_page){
    $str = "下一页 ";
   }
   if ($this->sum_page>1 and $this->ipage>1){
    $str.= "上一页";
   }
   return $str;
  }
  function show_page_select(){
   if ($this->sum_page>1){
    $str = "   ";
   }
   return $str;
  }
  function show_page_select_wap(){
   if ($this->sum_page>1){
    $str = "";
   }
   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;
  }
 }
?>

 

如果您加了新功能,或者是有改进,请与大家一起分享。

长文章分页类,可以手工指定分页符,也可以让程序自动分页。

实例代码:请以UTF-8的文件编码进行测试。

代码:
<font face="幼圆"><?php <br />     include('cutpage.php');<br>     header("content-type:text/html;charset=utf-8");//设置页面编码<br>     //自定义的长文章字符串,可以包含 html 代码,若字符串中有手动分页符 {nextpage} 则优先按手动分页符进行分页<br>     $content = file_get_contents('text.txt');<br>     $ipage = $_GET["ipage"]? intval($_GET["ipage"]):1;<br>     $CP = new cutpage();<br>     $CP->pagestr = $content;<br>     $CP->cut_str();<br>     echo $CP->pagearr[$ipage-1]."<hr>";<br>     echo $CP->show_prv_next();<br> ?></font>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:smarty页函数Nächster Artikel:smarty结合xajax检测用户名