下面我來分析了長文章分頁與文章分頁程式碼,有需要的朋友可參考參考。
辦法一、按字數控制進行分頁
按字數分頁辦法簡單易用,但效果不好。
大致思想:首先、設定每頁能容納的最大字數;然後、計算文章內容的總字數,再由總字數和單頁最大字數計算出出總頁數。這樣整個分頁的準備工作就已經做好了。
具體到每一頁的顯示內容可以通過內容截取來實現。比如:頁容納500字,文章內容有2200字,那麼當頁面傳遞page=2時應該顯示第501至1000之間的內容。
這種辦法簡單,但顯示時可能會遇到麻煩,文章內容通常伴有HTML標籤,進行內容切割時實現HTML標籤的閉合有一定難度,如果這個工作沒做好,那麼分頁後的效果顯然也是不好的。
| 代碼如下 |
複製代碼 |
$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." "; //echo "長度:".$CLength." "; //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"," ",$output); //斷行符號換行,根據需要調整 echo $output ; if($PageCount > 1) { echo "
"; echo "".$page."/".$PageCount."頁 "; if($page>1) echo "上一頁 "; else echo "上一頁 "; for( $i=1 ; $i <= $PageCount ; $i++) { echo "[".$i."] "; } if($page < $PageCount) echo " 下一頁 "; else echo " 下一頁 "; echo ""; } } }?> |
辦法二、通過分頁符進行分頁
通過分頁符進行分頁比起第一種辦法要更為理想。
大致思想:在編輯文章內容時往內容裡面插入分頁符(如:),在文章顯示時對文章內容進行分割,每一部分表示一個頁的內容,通過傳遞參數控制顯示第幾頁。
這種辦法比較人性化,畢竟通過人工控制出來的分頁截取的內容更符全我們的思維,而且可以一定程度上避免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 = "geturl()."=".($this->page-1)."' class='div'>上一頁 "; } //輸出數字頁碼 for($j=1;$j<=$this->pagecount;$j++) { if($j == $this->page) { $pagenav .= "".$j." "; } else { $pagenav .= "geturl()."=".$j."' class='div'>".$j." "; } } //下一頁 if($this->page < $this->pagecount && $this->pagecount >1) { $pagenav .= "geturl()."=".($this->page+1)."' class='div'>下一頁 "; } 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(); //輸出頁碼 ?> |
更多詳細內容請查看:http://www.bKjia.c0m/phper/php-gj/35233.htm
http://www.bkjia.com/PHPjc/631578.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631578.htmlTechArticle下面我來分析了長文章分頁與文章分頁程式碼,有需要的朋友可參考參考。 辦法一、按字數控制進行分頁 按字數分頁辦法簡單易用,但效...