国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php長文章分頁原理與實現程序

2024-05-04 23:06:45
字體:
來源:轉載
供稿:網友

辦法一、按字數控制進行分頁

按字數分頁辦法簡單易用,但效果不好。

大致思想:首先、設定每頁能容納的最大字數;然后、計算文章內容的總字數,再由總字數和單頁最大字數計算出出總頁數。這樣整個分頁的準備工作就已經做好了。

具體到每一頁的顯示內容可以通過內容截取來實現。比如:頁容納500字,文章內容有2200字,那么當頁面傳遞page=2時應該顯示第501至1000之間的內容。

這種辦法簡單,但顯示時可能會遇到麻煩,文章內容通常伴有HTML標簽,進行內容切割時實現HTML標簽的閉合有一定難度,如果這個工作沒做好,那么分頁后的效果顯然也是不好的。

代碼如下:

  1. <?php  
  2.  
  3. $content1="內容要很長。。。。。。"
  4. $current=$_REQUEST['page_t'];  
  5.  $result=ff_page($content1,$current);  
  6.  echo $result
  7.  function ff_page($content,$page)     
  8.     {     
  9.     global $expert_id;   
  10.      
  11.     if (emptyempty($page)) { 
  12.          $page = 1 ; 
  13.     }  //給$page賦初始值 
  14.      
  15.     $PageLength = 2000; //每頁字數     
  16.     $CLength = strlen($content);  //文章長度   
  17.     $PageCount = floor(($CLength / $PageLength)) + 1; //計算頁數     
  18.     $PageArray=array();//斷頁位置數組       
  19.     $Seperator = array("n","r","。","!","?",";",",","”","’",".","!","?",";"); //分隔符號     
  20.      
  21.     //echo "頁數:".$PageCount."<br >";     
  22.     //echo "長度:".$CLength."<br >";     
  23.     //strpos() 函數返回字符串在另一個字符串中第一次出現的位置     
  24.      
  25.     if($CLength <= $PageLength)     
  26.      {     
  27.         echo $content;     
  28.      }//如果只有一頁,直接打印 
  29.        else{     
  30.         $PageArray[0]=0;     
  31.         $Pos = 0;     
  32.         $i=0;     
  33.      //第一頁,print_r($Seperator);    
  34.     for$j=0 ; $j < sizeof($Seperator); $j++)     
  35.        {     
  36.       $Pos=strpos($content,$Seperator[$j],$PageArray[$i]+1900);   
  37.       while($Pos > 0 && $Pos<($i+1)*$PageLength && $Pos > $i*$PageLength )     
  38.       {     
  39.      $PageArray[$i] = $Pos ; 
  40.      if ($Pos+$PageLength > $CLength
  41.      { 
  42.          $start_p = $CLength-1 ;    
  43.      } 
  44.      else
  45.          $start_p = $Pos+$PageLength ; 
  46.      } 
  47.      //給一個找尋位置的起始點,防止超過位置總字符數     
  48.      $Pos = strpos($content,$Seperator[$j],$start_p) ;      
  49.       }  
  50.         //如果已經找到分頁點,跳出循環 
  51.         if($PageArray[$i]>0)     
  52.         {     
  53.          $j = $j + sizeof($Seperator) + 1; 
  54.         }     
  55.  }      
  56.    
  57.     for$i = 1; $i < $PageCount-1; $i++ ) 
  58.     {     
  59.        for$j = 0 ; $j < sizeof($Seperator); $j++)     
  60.        {          
  61.          $Pos=strpos($content,$Seperator[$j],$PageArray[$i-1]+1900);    
  62.      while($Pos > 0 && $Pos < ($i+1)*$PageLength && $Pos > $i*$PageLength )    
  63.    {     
  64.       $PageArray[$i] = $Pos ;          
  65.       if ($Pos+$PageLength > $CLength
  66.       { 
  67.          $start_p2 = $CLength-1 ;    
  68.       } 
  69.       else
  70.          $start_p2 = $Pos+$PageLength ; 
  71.       }  
  72.       $Pos = strpos($content,$Seperator[$j],$start_p2) ;     
  73.     }     
  74.    if($PageArray[$i]>0)     
  75.    {     
  76.     $j = $j + sizeof($Seperator) + 1;     
  77.    }     
  78.     }     
  79.    }     
  80.     //--PHP長文章分頁函數最后一頁      
  81.     $PageArray[$PageCount-1] = $CLength;  
  82.     //$page=2;     
  83.    
  84.     if($page==1)     
  85.  {     
  86.      $output=substr($content,0,$PageArray[$page-1]+2);     
  87.  }     
  88.     if($page > 1 && $page <= $PageCount)     
  89.  {     
  90.   $output=substr($content,$PageArray[$page-2]+2,$PageArray[$page-1]-$PageArray[$page-2]);     
  91.   $output=" (上接第".($page-1)."頁)n".$output;     
  92.  }     
  93.      
  94. //  echo str_replace("n","<br >&nbsp;&nbsp;&nbsp;",$output); //回車換行,根據需要調整     
  95.     echo $output ;   
  96.          
  97.  if($PageCount > 1)     
  98.  {     
  99.     echo "<br ><center>";     
  100.     echo "<font color='ff0000'>".$page."</font>/".$PageCount."頁 &nbsp;";    
  101.     if($page>1)     
  102.      echo "<a href=$PHP_SELF?expert_id=$expert_id&page_t=".($page-1).">上一頁</a> ";     
  103.     else     
  104.       echo "上一頁 ";     
  105.           
  106.     for$i=1 ; $i <= $PageCount ; $i++)     
  107.     {     
  108.      echo "<a href=$PHP_SELF?expert_id=$expert_id&page_t=".$i.">[".$i."]</a> ";     
  109.     }     
  110.         
  111.     if($page < $PageCount)     
  112.         echo " <a href=$PHP_SELF?expert_id=$expert_id&page_t=".($page+1).">下一頁</a> ";     
  113.   else     
  114.    echo " 下一頁 ";     
  115.   echo "</center>";     
  116.     }     
  117.  }     
  118. ?>  
 

辦法二、通過分頁符進行分頁

通過分頁符進行分頁比起第一種辦法要更為理想。

大致思想:在編輯文章內容時往內容里面插入分頁符(如:<hr>),在文章顯示時對文章內容進行分割,每一部分表示一個頁的內容,通過傳遞參數控制顯示第幾頁。
這種辦法比較人性化,畢竟通過人工控制出來的分頁截取的內容更符全我們的思維,而且可以一定程度上避免HTML標簽不閉合的情形。

文章內容分頁代碼,是根據由編輯器插入的分頁符來操作了,我們可以分出超漂亮的偏移效果的分頁。

代碼如下:

  1. <style type="text/css"
  2. <!-- 
  3. body { 
  4.  width:800px; 
  5.  margin:0 auto; 
  6.  margin-top:50px; 
  7.  font-size:12px; 
  8. a { 
  9.  color:#014ccc; 
  10.  text-decoration:none; 
  11. .div { 
  12.  float:left; 
  13.  cursor:pointer; 
  14.  font-weight:bold; 
  15.  margin-right:5px; 
  16.  display: block; 
  17.  padding:3px 7px; 
  18.  text-align:center; 
  19.  border:#bbdded solid 1px; 
  20. .divs { 
  21.  float:left; 
  22.  font-weight:bold; 
  23.  margin-right:5px; 
  24.  display: block; 
  25.  padding:3px 7px; 
  26.  text-align:center; 
  27.  border:#cccccc solid 1px; 
  28. .divsi { 
  29.  float:left; 
  30.  font-weight:bold; 
  31.  margin-right:5px; 
  32.  display: block; 
  33.  padding:3px 7px; 
  34.  text-align:center; 
  35.  background:#3399ff; 
  36.  color:#ffffff; 
  37.  border:#cccccc solid 1px; 
  38. .div:hover { 
  39.  background:#3399ff; 
  40.  color:#ffffff; 
  41. .divsi:hover { 
  42.  background:#3399ff; 
  43.  color:#ffffff; 
  44. --> 
  45. </style> 
  46. class contentpage 
  47.  private $content;  //文章內容 
  48.  private $pagesize;    //每頁最少字節數 
  49.  private $breakflag;  //分頁符(可以自定義,默認為n) 
  50.  private $pageurl;  //url地址 
  51.  private $pagevar;  //分頁參數 
  52.  public  $pagecount;  //總頁數 
  53.  public  $page;   //當前頁碼 
  54.  public  $pagebreak;  //每頁起始位置 
  55.  function __construct($content = "",$pagesize = 10,$breakflag ="n",$pageurl = '',$pagevar = 'p'
  56.  { 
  57.   $this->content   = $content
  58.   $this->pagesize  = $pagesize
  59.   $this->breakflag = $breakflag
  60.   $this->pageurl   = $pageurl
  61.   $this->pagevar   = $pagevar
  62.   $this->getpages(); 
  63.  } 
  64.  //總頁數,每頁的起始位置和結束位置 
  65.  public function getpages() 
  66.  { 
  67.   $contentlen   = strlen($this->content); //文章總字節數 
  68.   $this->pagebreak[0] = 0; 
  69.   $i = 0; 
  70.   $offset = $this->pagesize; 
  71.    
  72.   for ($k=0;$k<$contentlen/$this->pagesize;$k++) 
  73.   { 
  74.    if($offset > $contentlen
  75.    { 
  76.     $i++; 
  77.     $this->pagebreak[$i] = $contentlen
  78.     break
  79.    } 
  80.    //查找$this->pagevar出現的位置 
  81.    $where = strpos($this->content,$this->breakflag,$offset); 
  82.    if($where > $contentlen or intval($where) < 1) 
  83.    { 
  84.     $i++; 
  85.     $this->pagebreak[$i] = $contentlen
  86.     break
  87.    } 
  88.    else  
  89.    { 
  90.     $i++; 
  91.     $this->pagebreak[$i] = $where
  92.     $offset = $where + $this->pagesize; 
  93.    } 
  94.   } 
  95.   $this->pagecount = $i
  96.   if(isset($_get[$this->pagevar]) && $_get[$this->pagevar] >1 && $_get[$this->pagevar] <= $this->pagecount) 
  97.   { 
  98.    $this->page = $_get[$this->pagevar]; 
  99.   } 
  100.   else 
  101.   { 
  102.    $this->page = 1; 
  103.   } 
  104.  } 
  105.  //每頁內容 
  106.  function getpage() 
  107.  { 
  108.   //截取當前頁碼的數據 
  109.   if($this->page > 1) 
  110.   { 
  111.    return substr($this->content,$this->pagebreak[$this->page-1]+1,$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]); 
  112.   } 
  113.   else 
  114.   { 
  115.    return substr($this->content,$this->pagebreak[$this->page-1],$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]); 
  116.   } 
  117.  } 
  118.  //分頁條 
  119.  public function getpagenav() 
  120.  { 
  121.   if($this->page > 1) 
  122.   { 
  123.    $pagenav = "<a href='".$this->geturl()."=".($this->page-1)."' class='div'>上一頁</a>&nbsp;&nbsp;"
  124.   } 
  125.   //輸出數字頁碼 
  126.   for($j=1;$j<=$this->pagecount;$j++) 
  127.   { 
  128.    if($j == $this->page) 
  129.    { 
  130.     $pagenav .= "<span class='divsi'>".$j."</span>&nbsp;&nbsp;"
  131.    } 
  132.    else 
  133.    { 
  134.     $pagenav .= "<a href='".$this->geturl()."=".$j."' class='div'>".$j."</a>&nbsp;&nbsp;"
  135.    } 
  136.   } 
  137.   //下一頁 
  138.   if($this->page < $this->pagecount && $this->pagecount >1) 
  139.   { 
  140.    $pagenav .= "<a href='".$this->geturl()."=".($this->page+1)."' class='div'>下一頁</a>&nbsp;&nbsp;"
  141.   } 
  142.   return $pagenav
  143.  } 
  144.  //獲取url地址 
  145.  public function geturl() 
  146.  { 
  147.   $url = $_server['request_uri']; 
  148.   $parse_url = parse_url($url); 
  149.   $query_url = $parse_url['query']; 
  150.    
  151.   if($query_url
  152.   { 
  153.    $query_url = ereg_replace("(^|&)".$this->pagevar."=".$this->page,"",$query_url); 
  154.    $url = str_replace($parse_url['query'],$query_url,$url); 
  155.    if($query_url
  156.    { 
  157.     $url .= "&".$this->pagevar; 
  158.    } 
  159.    else 
  160.    { 
  161.     $url .= $this->pagevar; 
  162.    } 
  163.   } 
  164.   else 
  165.   { 
  166.    $url .= "?".$this->pagevar; 
  167.   } 
  168.   return $url
  169.  } 
  170. $content = "第一頁:文章內容分頁阿斯頓浪費空間阿斯頓來看福建省地方吉林省福建路口附近大手拉飛機上浪費的說浪費監理費 
  171. 第二頁:阿斯頓房間阿雙方了解啊對薩拉開發記得誰來付款將令對方空間的來福建阿里是否 
  172. 第三頁:歐文炯誒哦生地拉開方面來看就繼續超文章內容分頁濾機藍卡 
  173. 第四頁:歐文日據拉薩及發動四分啊就雙方的將愛是發覺是文章內容分頁否了。"; 
  174. $model = new contentpage($content); 
  175. echo $model->getpage();  //輸出分頁內容 
  176. echo $model->getpagenav(); //輸出頁碼 
  177. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄江县| 洞口县| 武川县| 翼城县| 德惠市| 莆田市| 新平| 隆化县| 涞水县| 登封市| 安阳县| 福贡县| 天等县| 郓城县| 瑞金市| 民和| 南召县| 海晏县| 富阳市| 连平县| 新昌县| 鸡东县| 宾川县| 新野县| 潢川县| 澎湖县| 阜城县| 宜良县| 无棣县| 孟州市| 广宁县| 临武县| 汪清县| 两当县| 永兴县| 陕西省| 罗江县| 清新县| 崇义县| 辽阳市| 辽源市|