程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 扔出一個功用比比較高的 分頁類(for PHP5.x)

扔出一個功用比比較高的 分頁類(for PHP5.x)

編輯:關於PHP編程




扔出一個功用比比較高的 分頁類(for PHP5.x)
解決方法
怕水平的不高,所以從來沒有放過任何代碼,這個類我已經用了很久,近來用面向對象方法重寫,適用於PHP5.x,特地扔出,不怕見笑,希望拋磚引玉。
這個類適用於配合數據庫查詢分頁,和數組分頁。下面有使用方法。

/*

* 名稱: 分頁類

* 介紹: 適用於數組分頁和配合sql查詢的分頁

* 作者: idlion || Moonfly ([[email protected]][email protected][/email])

* 創建時間: 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 .= "mQueryString.$i."' style='".$this>mCssIndexBarPage."'>".$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 "mQueryString."1'>".$this>mFirstButton." ";

}



// 得到頁碼索引條 上一頁按鈕

private function GetNavPreButton() {

if( $this>mCurPageNumber>1 ) {

$pre_number = $this>mCurPageNumber1;

}

else {

$pre_number = 1;

}

return "mQueryString.$pre_number."'>".$this>mPreButton." ";

}



// 得到頁碼索引條 下一頁按鈕

private function GetNavNextButton() {

if( $this>mCurPageNumber<$this>mTotalPagesNum ) {

$next_number = $this>mCurPageNumber+1;

}

else {

$next_number = $this>mTotalPagesNum;

}

return "mQueryString.$next_number."'>".$this>mNextButton." ";

}



// 得到頁碼索引條 末頁按鈕

private function GetNavLastButton() {

return "mQueryString.$this>mTotalPagesNum."'>".$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>GetPageInfo()
後半部分分頁索引導航,是$pagebreak>GetIndexBar()



輸出內容和樣式可以很方便的在類中調整,很簡單,有興趣可以研究一下

[ ]
附件: 您所在的用戶組無法下載或查看附件

D8888D回貼內容
好東西,怎麼不打個包,方便學習啊:$
D8888D回貼內容
這個是類似新聞列表分頁吧.不是新聞的內容分頁.....這個是[url=http://www.phpchina.cn/bbs/viewthread.php?tid=12999]鏈接標記http://www.phpchina.cn/bbs/viewthread.php?tid=12999[/url]是對內容的分頁..

[ ]
D8888D回貼內容
[img]http://www.phpchina.com/bbs/images/smilies/default/victory.gif[/img] [img]http://www.phpchina.com/bbs/images/smilies/default/victory.gif[/img][img]http://www.phpchina.com/bbs/images/smilies/default/victory.gif[/img]
D8888D回貼內容
非常好
有代碼
有注解
有應用實例

非常期望大家都用這種形式來發代碼
D8888D回貼內容
:) :) :) :)
D8888D回貼內容
有個問題,就是這樣ordy by ...寫在哪裡呢?
不懂問1下
D8888D回貼內容
為什麼不能輸出分頁導航 ..... 能不詳細介紹下! 我是新手!
D8888D回貼內容
怎麼搞的這麼多呀:(
D8888D回貼內容
原帖由 orclord 於 200761 09:43 發表 [url=http://www.phpchina.com/bbs/redirect.php?goto=findpost&pid=201879&ptid=26485]鏈接標記[img]http://www.phpchina.com/bbs/images/common/back.gif[/img][/url]
有個問題,就是這樣ordy by ...寫在哪裡呢?
不懂問1下
除了limit ....信息,其他的都是些在$sql裡面。
SetSqlQuery方法可以自動為$sql語句加上limit....內容。

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