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

深入分析PHP文章內容分頁

編輯:關於PHP編程

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

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

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

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

    具體到每一頁的顯示內容可以通過內容截取來實現。比如:頁容納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的時候  為普通分頁模式
     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);
     }
    }
    ?>

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