文章內容分頁主要有兩個辦法:
辦法一、按字數控制進行分頁
按字數分頁辦法簡單易用,但效果不好。
大致思想:首先、設定每頁能容納的最大字數;然後、計算文章內容的總字數,再由總字數和單頁最大字數計算出出總頁數。這樣整個分頁的準備工作就已經做好了。
具體到每一頁的顯示內容可以通過內容截取來實現。比如:頁容納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." "; 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教程吧。