怕水平的不高,所以從來沒有放過任何代碼,這個類我已經用了很久,近來用面向對象方法重寫,適用于PHP5.x,特地扔出,不怕見笑,希望拋磚引玉。
這個類適用于配合數據庫查詢分頁,和數組分頁,下面有使用方法。
- /*
- * 名稱: 分頁類
- * 介紹: 適用于數組分頁和配合sql查詢的分頁
- * 作者: idlion || Moonfly
- * 創建時間: 20060218
- * 最后修改: 20070524
- */
- class PageBreak {
- private $mTotalRowsNum = 0; // 總信息行數
- private $mCurPageNumber = 1; // 當前所在頁
- private $mTotalPagesNum = 1; // 總頁數
- private $mQueryString; // 頁面傳遞的數據(url?后的字符串)
- private $mPageRowsNum = 20; // 每頁顯示行數
- private $mIndexBarLength = 5; // 索引條的頁數
- private $mIndexBar = ''; // 頁碼索引條
- private $mPageInfo = ''; // 分頁信息
- // 頁碼索引條樣式
- private $mNextButton = "8";
- private $mPreButton = "7";
- private $mFirstButton = "9";
- private $mLastButton = ":";
- private $mCssIndexBarCurPage = "fontweight:bold;color:#FF0000";
- private $mCssIndexBarPage = '';
- // 分頁信息樣式
- private $mCssPageInfoNumFont = 'color:#FF0000';
- private $mCssPageInfoFont = '';
- // 構造方法
- public function __construct(&$rSqlQuery, $userPageRowsNum='') {
- if( !is_array($rSqlQuery) ) {
- $this>SetDbPageBreak($rSqlQuery, $userPageRowsNum);
- }
- else {
- $this>SetArrayPageBreak($rSqlQuery, $userPageRowsNum);
- }
- }
- // 設置數據庫型分頁
- private function SetDbPageBreak(&$rSqlQuery, $userPageRowsNum='') {
- $this>SetDbTotalRowsNum($rSqlQuery);
- $this>SetTotalPagesNum($userPageRowsNum);
- if( $this>mTotalPagesNum > 1 ) {
- $this>SetCurPageNumber();
- $this>SetSqlQuery($rSqlQuery);
- $this>SetQueryString();
- $this>SetIndexBar();
- $this>SetPageInfo();
- }
- }
- // 設置數組型分頁
- private function SetArrayPageBreak(&$rArray, $userPageRowsNum='', $userTotalRowsNum='') {
- $this>SetArrayTotalRowsNum($rArray, $userTotalRowsNum);
- $this>SetTotalPagesNum($userPageRowsNum);
- if( $this>mTotalPagesNum > 1 ) {
- $this>SetCurPageNumber();
- $this>SetArray($rArray);
- $this>SetQueryString();
- $this>SetIndexBar();
- $this>SetPageInfo();
- }
- }
- // 數據庫型計算總行數
- private function SetDbTotalRowsNum($rSqlQuery) {
- $this>mTotalRowsNum = mysql_num_rows( mysql_query($rSqlQuery) );
- }
- // 數組型計算總行數
- private function SetArrayTotalRowsNum($array) {
- $this>mTotalRowsNum = count($array);
- }
- // 計算總頁數
- private function SetTotalPagesNum($userPageRowsNum='') {
- if( $userPageRowsNum ) {
- $this>mPageRowsNum = $userPageRowsNum;
- }
- $this>mTotalPagesNum = (int)( floor( ($this>mTotalRowsNum1)/$this>mPageRowsNum )+1 );
- }
- // 計算當前頁數
- private function SetCurPageNumber() {
- if( $_GET['cur_page'] ) {
- $this>mCurPageNumber = $_GET['cur_page'];
- }
- }
- // 修正Sql截取語句
- private function SetSqlQuery(&$rSqlQuery) {
- $start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
- $rSqlQuery .= " LIMIT ".$start_number.",".$this>mPageRowsNum;
- }
- // 修正截取后的Array
- private function SetArray(&$rArray) {
- $start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
- $rArray = array_slice($rArray, $start_number, $this>mPageRowsNum);
- }
- // 修正 $_GET 傳遞數據
- private function SetQueryString() {
- $query_string = $_SERVER['QUERY_STRING'];
- if ( $query_string == '' ) {
- $this>mQueryString = "?cur_page=";
- }
- else {
- $this>mQueryString = preg_replace("/&?cur_page=d+/", '', $query_string);
- $this>mQueryString = "?".$this>mQueryString."&cur_page=";
- }
- }
- // 設置頁碼索引條
- private function GetPageIndex() {
- if( $this>mTotalPagesNum <= $this>mIndexBarLength ) {
- $first_number = 1;
- $last_number = $this>mTotalPagesNum;
- }
- else {
- $offset = (int)floor($this>mIndexBarLength/2);
- if( ($this>mCurPageNumber$offset) <= 1 ) {
- $first_number = 1;
- }
- elseif( ($this>mCurPageNumber+$offset) > $this>mTotalPagesNum ) {
- $first_number = $this>mTotalPagesNum$this>mIndexBarLength+1;
- }
- else {
- $first_number = $this>mCurPageNumber$offset;
- }
- $last_number = $first_number+$this>mIndexBarLength1;
- }
- $last_number;
- for( $i=$first_number; $i<=$last_number; $i++ ) {
- if( $this>mCurPageNumber == $i ) {
- $page_index .= "".$i." ";
- }
- else {
- $page_index .= "".$i." ";
- }
- }
- return $page_index;
- }
- // 設置頁碼索引條
- private function SetIndexBar() {
- $this>mIndexBar = $this>GetNavFirstButton();
- $this>mIndexBar .= $this>GetNavPreButton();
- $this>mIndexBar .= $this>GetPageIndex();
- $this>mIndexBar .= $this>GetNavNextButton();
- $this>mIndexBar .= $this>GetNavLastButton();
- }
- // 得到頁碼索引條 首頁按鈕
- private function GetNavFirstButton() {
- return "".$this>mFirstButton." ";
- }
- // 得到頁碼索引條 上一頁按鈕
- private function GetNavPreButton() {
- if( $this>mCurPageNumber>1 ) {
- $pre_number = $this>mCurPageNumber1;
- }
- else {
- $pre_number = 1;
- }
- return "".$this>mPreButton." ";
- }
- // 得到頁碼索引條 下一頁按鈕
- private function GetNavNextButton() {
- if( $this>mCurPageNumbermTotalPagesNum ) {
- $next_number = $this>mCurPageNumber+1;
- }
- else {
- $next_number = $this>mTotalPagesNum;
- }
- return "".$this>mNextButton." ";
- }
- // 得到頁碼索引條 末頁按鈕
- private function GetNavLastButton() {
- return "".$this>mLastButton." ";
- }
- // 設置分頁信息
- private function SetPageInfo() {
- $this>mPageInfo ="";
- $this>mPageInfo .= "共 ".$this>mTotalRowsNum." 條信息 | ";
- $this>mPageInfo .= "".$this>mPageRowsNum." 條/頁 | ";
- $this>mPageInfo .= "共 ".$this>mTotalPagesNum." 頁 | ";
- $this>mPageInfo .= "第 ".$this>mCurPageNumber." 頁";
- $this>mPageInfo .= "";
- }
- // 取出頁碼索引條
- public function GetIndexBar() {
- return $this>mIndexBar;
- }
- // 取出分頁信息
- public function GetPageInfo() {
- return $this>mPageInfo;
- }
- }
- ?>
代碼用法1: 配合數據庫使用(例子中配合的是我自己的數據庫操作類和模版類)
- // 這是一個sql查詢語句,我們來對它的查詢結果作出分頁
- $sql = "select * from member";
- // 讀取分頁類
- require_once("pagebreak.php");
- // 分頁初始化
- // $sql就是上面的查詢語句
- // 20是每頁顯示的數量
- // 通過分頁類的初始化,這個查詢語句就被加上" limit ...... "
- $pagebreak = new PageBreak($sql, 20);
- // 生成分頁索引導航條
- $navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
- // 查詢的結果(這里用我自己的類,不多說了)
- $result = $db>GetFieldsArray($sql)
- // 輸出查詢結果
- var_dump($result);
- // 輸出分頁索引導航條
- echo $navbar;
代碼用法2: 配合要輸出的數組
- // 這是一個sql查詢語句,并得到查詢結果
- $sql = "select * from member";
- $result = $db>GetFieldsArray($sql);
- // 讀取分頁類
- require_once("pagebreak.php");
- // 分頁初始化
- // $result就是上面的查詢后得到的結果
- // 20是每頁顯示的數量
- // 通過分頁類的初始化,這個結果數組被自動截取成相應頁的信息內容
- $pagebreak = new PageBreak($result, 20);
- // 生成分頁索引導航條
- $navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
- // 輸出查詢結果
- var_dump($result);
- // 輸出分頁索引導航條
- echo $navbar;
下面是輸出樣式:
后半部分分頁索引導航,是$pagebreak>GetIndexBar()
新聞熱點
疑難解答