程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php長文章分頁原理與實現程序

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

編輯:關於PHP編程

下面我來分析了長文章分頁與文章分頁程序代碼,有需要的朋友可參考參考。

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

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

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

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

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

 代碼如下 復制代碼

 <?php 


$content1="內容要很長。。。。。。";

$current=$_REQUEST['page_t'];
 $result=ff_page($content1,$current);
 echo $result;

 function ff_page($content,$page)   
    {   
    global $expert_id; 
   
    if (empty($page)) {
         $page = 1 ;
    }  //給$page賦初始值
   
    $PageLength = 2000; //每頁字數   
    $CLength = strlen($content);  //文章長度 
    $PageCount = floor(($CLength / $PageLength)) + 1; //計算頁數   
    $PageArray=array();//斷頁位置數組     
    $Seperator = array("n","r","。","!","?",";",",","”","’",".","!","?",";"); //分隔符號   
   
    //echo "頁數:".$PageCount."<br >";   
    //echo "長度:".$CLength."<br >";   
    //strpos() 函數返回字符串在另一個字符串中第一次出現的位置   
   
    if($CLength <= $PageLength)   
     {   
        echo $content;   
     }//如果只有一頁,直接打印
       else{   
        $PageArray[0]=0;   
        $Pos = 0;   
        $i=0;   
     //第一頁,print_r($Seperator);  
    for( $j=0 ; $j < sizeof($Seperator); $j++)   
       {   
      $Pos=strpos($content,$Seperator[$j],$PageArray[$i]+1900); 
      while($Pos > 0 && $Pos<($i+1)*$PageLength && $Pos > $i*$PageLength )   
      {   
     $PageArray[$i] = $Pos ;
     if ($Pos+$PageLength > $CLength)
     {
         $start_p = $CLength-1 ;  
     }
     else{
         $start_p = $Pos+$PageLength ;
     }
     //給一個找尋位置的起始點,防止超過位置總字符數   
     $Pos = strpos($content,$Seperator[$j],$start_p) ;    
      }
        //如果已經找到分頁點,跳出循環
        if($PageArray[$i]>0)   
        {   
         $j = $j + sizeof($Seperator) + 1;
        }   
 }    
 
    for( $i = 1; $i < $PageCount-1; $i++ )
    {   
       for( $j = 0 ; $j < sizeof($Seperator); $j++)   
       {        
         $Pos=strpos($content,$Seperator[$j],$PageArray[$i-1]+1900);  
     while($Pos > 0 && $Pos < ($i+1)*$PageLength && $Pos > $i*$PageLength )   
   {   
      $PageArray[$i] = $Pos ;        
      if ($Pos+$PageLength > $CLength)
      {
         $start_p2 = $CLength-1 ;  
      }
      else{
         $start_p2 = $Pos+$PageLength ;
      }
      $Pos = strpos($content,$Seperator[$j],$start_p2) ;   
    }   
   if($PageArray[$i]>0)   
   {   
    $j = $j + sizeof($Seperator) + 1;   
   }   
    }   
   }   
    //--PHP長文章分頁函數最後一頁    
    $PageArray[$PageCount-1] = $CLength;
    //$page=2;   
 
    if($page==1)   
 {   
     $output=substr($content,0,$PageArray[$page-1]+2);   
 }   
    if($page > 1 && $page <= $PageCount)   
 {   
  $output=substr($content,$PageArray[$page-2]+2,$PageArray[$page-1]-$PageArray[$page-2]);   
  $output=" (上接第".($page-1)."頁)n".$output;   
 }   
   
//  echo str_replace("n","<br >&nbsp;&nbsp;&nbsp;",$output); //回車換行,根據需要調整   
    echo $output ; 
       
 if($PageCount > 1)   
 {   
    echo "<br ><center>";   
    echo "<font color='ff0000'>".$page."</font>/".$PageCount."頁 &nbsp;";   
    if($page>1)   
     echo "<a href=$PHP_SELF?expert_id=$expert_id&page_t=".($page-1).">上一頁</a> ";   
    else   
      echo "上一頁 ";   
        
    for( $i=1 ; $i <= $PageCount ; $i++)   
    {   
     echo "<a href=$PHP_SELF?expert_id=$expert_id&page_t=".$i.">[".$i."]</a> ";   
    }   
      
    if($page < $PageCount)   
        echo " <a href=$PHP_SELF?expert_id=$expert_id&page_t=".($page+1).">下一頁</a> ";   
  else   
   echo " 下一頁 ";   
  echo "</center>";   
    }   
 }   
}

?> 


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

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

大致思想:在編輯文章內容時往內容裡面插入分頁符(如:<hr>),在文章顯示時對文章內容進行分割,每一部分表示一個頁的內容,通過傳遞參數控制顯示第幾頁。

這種辦法比較人性化,畢竟通過人工控制出來的分頁截取的內容更符全我們的思維,而且可以一定程度上避免HTML標簽不閉合的情形。

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

 代碼如下 復制代碼

class contentpage
{
 private $content;  //文章內容
 private $pagesize;    //每頁最少字節數
 private $breakflag;  //分頁符(可以自定義,默認為n)
 private $pageurl;  //url地址
 private $pagevar;  //分頁參數
 public  $pagecount;  //總頁數
 public  $page;   //當前頁碼
 public  $pagebreak;  //每頁起始位置

 function __construct($content = "",$pagesize = 10,$breakflag ="n",$pageurl = '',$pagevar = 'p')
 {
  $this->content   = $content;
  $this->pagesize  = $pagesize;
  $this->breakflag = $breakflag;
  $this->pageurl   = $pageurl;
  $this->pagevar   = $pagevar;
  $this->getpages();
 }

 //總頁數,每頁的起始位置和結束位置
 public function getpages()
 {
  $contentlen   = strlen($this->content); //文章總字節數
  $this->pagebreak[0] = 0;
  $i = 0;
  $offset = $this->pagesize;
 
  for ($k=0;$k<$contentlen/$this->pagesize;$k++)
  {
   if($offset > $contentlen)
   {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   //查找$this->pagevar出現的位置
   $where = strpos($this->content,$this->breakflag,$offset);
   if($where > $contentlen or intval($where) < 1)
   {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   else
   {
    $i++;
    $this->pagebreak[$i] = $where;
    $offset = $where + $this->pagesize;
   }
  }
  $this->pagecount = $i;
  if(isset($_get[$this->pagevar]) && $_get[$this->pagevar] >1 && $_get[$this->pagevar] <= $this->pagecount)
  {
   $this->page = $_get[$this->pagevar];
  }
  else
  {
   $this->page = 1;
  }
 }

 //每頁內容
 function getpage()
 {
  //截取當前頁碼的數據
  if($this->page > 1)
  {
   return substr($this->content,$this->pagebreak[$this->page-1]+1,$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }
  else
  {
   return substr($this->content,$this->pagebreak[$this->page-1],$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }

 }

 //分頁條
 public function getpagenav()
 {
  if($this->page > 1)
  {
   $pagenav = "<a href='".$this->geturl()."=".($this->page-1)."' class='div'>上一頁</a>&nbsp;&nbsp;";
  }

  //輸出數字頁碼
  for($j=1;$j<=$this->pagecount;$j++)
  {
   if($j == $this->page)
   {
    $pagenav .= "<span class='divsi'>".$j."</span>&nbsp;&nbsp;";
   }
   else
   {
    $pagenav .= "<a href='".$this->geturl()."=".$j."' class='div'>".$j."</a>&nbsp;&nbsp;";
   }
  }
  //下一頁
  if($this->page < $this->pagecount && $this->pagecount >1)
  {
   $pagenav .= "<a href='".$this->geturl()."=".($this->page+1)."' class='div'>下一頁</a>&nbsp;&nbsp;";
  }
  return $pagenav;
 }
 //獲取url地址
 public function geturl()
 {
  $url = $_server['request_uri'];
  $parse_url = parse_url($url);
  $query_url = $parse_url['query'];
 
  if($query_url)
  {
   $query_url = ereg_replace("(^|&)".$this->pagevar."=".$this->page,"",$query_url);
   $url = str_replace($parse_url['query'],$query_url,$url);
   if($query_url)
   {
    $url .= "&".$this->pagevar;
   }
   else
   {
    $url .= $this->pagevar;
   }
  }
  else
  {
   $url .= "?".$this->pagevar;
  }
  return $url;
 }
}

$content = "第一頁:文章內容分頁阿斯頓浪費空間阿斯頓來看福建省地方吉林省福建路口附近大手拉飛機上浪費的說浪費監理費
第二頁:阿斯頓房間阿雙方了解啊對薩拉開發記得誰來付款將令對方空間的來福建阿裡是否
第三頁:歐文炯诶哦生地拉開方面來看就繼續超文章內容分頁濾機藍卡
第四頁:歐文日據拉薩及發動四分啊就雙方的將愛是發覺是文章內容分頁否了。";
$model = new contentpage($content);
echo $model->getpage();  //輸出分頁內容
echo $model->getpagenav(); //輸出頁碼
?>

<style type="text/css教程">
<!--
body {
 width:800px;
 margin:0 auto;
 margin-top:50px;
 font-size:12px;
}
a {
 color:#014ccc;
 text-decoration:none;
}
.div {
 float:left;
 cursor:pointer;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 border:#bbdded solid 1px;
}
.divs {
 float:left;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 border:#cccccc solid 1px;
}
.divsi {
 float:left;
 font-weight:bold;
 margin-right:5px;
 display: block;
 padding:3px 7px;
 text-align:center;
 background:#3399ff;
 color:#ffffff;
 border:#cccccc solid 1px;
}
.div:hover {
 background:#3399ff;
 color:#ffffff;
}
.divsi:hover {
 background:#3399ff;
 color:#ffffff;
}
-->
</style>

更多詳細內容請查看:http://www.bKjia.c0m/phper/php-gj/35233.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved