深入分析PHP文章內容分頁

來源:互聯網
上載者:User

文章內容分頁主要有兩個辦法:

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

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

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

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

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

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

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

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

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

頁顯示
分頁顯示是將大批量的資料分批發送到用戶端的重要手段之一,通常是將資料庫中的結果集人為的分成一段一段的來顯示。

分類
PHP分頁分為列表分頁和內容分頁,不管是列表分頁還是內容分頁,基本原理是一樣的,將資料分批發送到用戶端。

pager.class.php
這是一個簡單的PHP分頁顯示類,目前支援兩種分頁模式。一種是最簡單的普通分頁模式[首頁] [上頁] [下頁] [尾頁]模式,另一種是經典分頁模式,即:[1][2][3][4][5][6][7][8][9][10][下一頁][尾頁]。
 

使用方法

 代碼如下 複製代碼

require_once 'pager.class.php';
$pager = new pager($totalPage,$currentPage);  // $pager對象
echo $pager->showpager();       // 輸出分頁

此分頁顯示類的建構函式
/*
@total_page     總頁數
@current_num    當前頁
@sub_pages      每次顯示的頁數
@subPage_link   每個分頁的連結
@subPage_type   分頁模式

當@subPage_type=1的時候為普通分頁模式
如: 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [下頁] [尾頁]
當@subPage_type=2的時候為經典分頁樣式
如: 當前第1/453頁 [首頁] [上頁] 1 2 3 4 5 6 7 8 9 10 [下頁] [尾頁]
*/

 代碼如下 複製代碼
pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2)

上述說的PHP分頁的兩種類別(列表分頁和內容分頁),相信列表分頁對大家並不陌生,對於內容分頁,常用的方法是以分頁符的形式(比如:<hr class="pager">)將內容分割成多段,求出總頁數,用當前頁碼去擷取分頁顯示列表。

 代碼如下 複製代碼

<?php
/**
 * 樣本:
 * <?php
 * require_once("pager.class.php");
 * $subPages=new pager($totalPage,$currentPage);
 * echo $subPages->showpager();
 * ?>
 * */
class pager{

 var $each_disNums;//每頁顯示的條目數
 var $nums;//總條目數
 var $current_page;//當前被選中的頁
 var $sub_pages;//每次顯示的頁數
 var $pageNums;//總頁數
 var $page_array = array();//用來構造分頁的數組
 var $subPage_link;//每個分頁的連結
 var $subPage_type;//顯示分頁的類型
 var $_lang = array(
  'index_page' => '首頁',
  'pre_page' => '上一頁',
  'next_page' => '下一頁',
  'last_page' => '尾頁',
  'current_page' => '當前頁:',
  'total_page' => '總頁數:',
  'current_show' => '當前顯示:',
  'total_record' => '總記錄數:'
 );
 /*
 __construct是SubPages的建構函式,用來在建立類的時候自動運行.
 @total_page    總頁數
 @current_num    當前被選中的頁
 @sub_pages      每次顯示的頁數
 @subPage_link   每個分頁的連結
 @subPage_type   顯示分頁的類型
 
 當@subPage_type=1的時候 www.111cn.net 為普通分頁模式
 example: 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [下頁] [尾頁]
 當@subPage_type=2的時候為經典分頁樣式
 example: 當前第1/453頁 [首頁] [上頁] 1 2 3 4 5 6 7 8 9 10 [下頁] [尾頁]
 */
 function __construct($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  $this->pager($total_page,$current_page,$sub_pages,$subPage_link,$subPage_type);
 }
 
 function pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  if(!$current_page){
   $this->current_page=1;
  }else{
   $this->current_page=intval($current_page);
  }
  $this->sub_pages=intval($sub_pages);
  $this->pageNums=ceil($total_page);
  if($subPage_link){
   if(strpos($subPage_link,'?page=') === false AND strpos($subPage_link,'&page=') === false){
    $subPage_link .= (strpos($subPage_link,'?') === false ? '?' : '&') . 'page=';
   }
  }
  $this->subPage_link=$subPage_link ? $subPage_link : $_SERVER['PHP_SELF'] . '?page=';
  $this->subPage_type = $subPage_type;
 }
 
 /*
    show_SubPages函數用在建構函式裡面。而且用來判斷顯示什麼樣子的分頁
 */
 function showpager(){
  if($this->subPage_type == 1){
   return $this->pagelist1();
  }elseif ($this->subPage_type == 2){
   return $this->pagelist2();
  }
 }
 
 
 /*
    用來給建立分頁的數組初始化的函數。
 */
 function initArray(){
  for($i=0;$i<$this->sub_pages;$i++){
   $this->page_array[$i]=$i;
  }
  return $this->page_array;
 }
 
 
 /*
    construct_num_Page該函數使用來構造顯示的條目
    即使:[1][2][3][4][5][6][7][8][9][10]
 */
 function construct_num_Page(){
  if($this->pageNums < $this->sub_pages){
   $current_array=array();
   for($i=0;$i<$this->pageNums;$i++){
    $current_array[$i]=$i+1;
   }
  }else{
   $current_array=$this->initArray();
   if($this->current_page <= 3){
    for($i=0;$i<count($current_array);$i++){
     $current_array[$i]=$i+1;
    }
   }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){
    for($i=0;$i<count($current_array);$i++){
     $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i;
    }
   }else{
    for($i=0;$i<count($current_array);$i++){
     $current_array[$i]=$this->current_page-2+$i;
    }
   }
  }
  
  return $current_array;
 }
 
 /*
 構造普通模式的分頁
 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [下頁] [尾頁]
 */
 function pagelist1(){
  $subPageCss1Str="";
  $subPageCss1Str.= $this->_lang['current_page'] . $this->current_page." / " .$this->pageNums." &nbsp; ";
  if($this->current_page > 1){
   $firstPageUrl=$this->subPage_link."1";
   $prewPageUrl=$this->subPage_link.($this->current_page-1);
   $subPageCss1Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
   $subPageCss1Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
  }else {
   $subPageCss1Str.="{$this->_lang['index_page']} ";
   $subPageCss1Str.="{$this->_lang['pre_page']} ";
  }
  
  if($this->current_page < $this->pageNums){
   $lastPageUrl=$this->subPage_link.$this->pageNums;
   $nextPageUrl=$this->subPage_link.($this->current_page+1);
   $subPageCss1Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
   $subPageCss1Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
  }else {
   $subPageCss1Str.="{$this->_lang['next_page']} ";
   $subPageCss1Str.="{$this->_lang['last_page']} ";
  }
  
  return $subPageCss1Str;
 }
 
 
 /*
 構造傳統模式的www.111cn.net分頁
 當前第1/453頁 [首頁] [上頁] 1 2 3 4 5 6 7 8 9 10 [下頁] [尾頁]
 */
 function pagelist2(){
  $subPageCss2Str="";
  $subPageCss2Str.=$this->_lang['current_page'] . $this->current_page."/" . $this->pageNums." ";
  
  if($this->current_page > 1){
   $firstPageUrl=$this->subPage_link."1";
   $prewPageUrl=$this->subPage_link.($this->current_page-1);
   $subPageCss2Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
   $subPageCss2Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
  }else {
   $subPageCss2Str.="{$this->_lang['index_page']} ";
   $subPageCss2Str.="{$this->_lang['pre_page']} ";
  }
  
  $a=$this->construct_num_Page();
  for($i=0;$i<count($a);$i++){
   $s=$a[$i];
   if($s == $this->current_page ){
     $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]";
   }else{
     $url=$this->subPage_link.$s;
     $subPageCss2Str.="[<a href='$url'>".$s."</a>]";
   }
  }
  
  if($this->current_page < $this->pageNums){
   $lastPageUrl=$this->subPage_link.$this->pageNums;
   $nextPageUrl=$this->subPage_link.($this->current_page+1);
   $subPageCss2Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
   $subPageCss2Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
  }else {
   $subPageCss2Str.="{$this->_lang['next_page']} ";
   $subPageCss2Str.="{$this->_lang['last_page']} ";
  }
  return $subPageCss2Str;
 }
 
 
 /*
    __destruct解構函式,當類不在使用的時候調用,該函數用來釋放資源。
 */
 function __destruct(){
  unset($each_disNums);
  unset($nums);
  unset($current_page);
  unset($sub_pages);
  unset($pageNums);
  unset($page_array);
  unset($subPage_link);
  unset($subPage_type);
 }
}
?>

好了我們只要把它儲存在一個檔案,在其它地方要使用時直接調用就可以了,非常好用的一個內容或記錄分頁類函數哦,這也算是一個入門層級的php教程吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.