比較的高機能なページングクラスを捨てます(PHP5.x用)
解決策
私のレベルは高くないので、長年このクラスを使用してきたコードを手放さず、最近、PHP5に適したオブジェクト指向のメソッドを使用して書き直しました。
このクラスは、データベース クエリと配列ページングによるページングに適しています。使用方法は次のとおりです。
/*
* 名前: ページネーションクラス
* 概要: 配列のページングと SQL クエリを使用したページングに適しています
* 著者: idlion || Moonfly ([email=id_lion@hotmail.com]id_lion@hotmail.com[/email])
*作成時間:20060218
* 最終更新日: 20070524
*/
クラス 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";
プライベート $mCssIndexBarPage = '';
// ページネーション情報のスタイル
プライベート $mCssPageInfoNumFont = 'color:#FF0000';
プライベート $mCssPageInfoFont = '';
//構築方法
パブリック関数 __construct(&$rSqlQuery, $userPageRowsNum='') {
if( !is_array($rSqlQuery) ) {
$this>SetDbPageBreak($rSqlQuery, $userPageRowsNum);
}
他に{
$this>SetArrayPageBreak($rSqlQuery, $userPageRowsNum);
}
}
//データベースタイプのページングを設定します
プライベート関数 SetDbPageBreak(&$rSqlQuery, $userPageRowsNum='') {
$this>SetDbTotalRowsNum($rSqlQuery);
$this>SetTotalPagesNum($userPageRowsNum);
if( $this>mTotalPagesNum > 1 ) {
$this>SetCurPageNumber();
$this>SetSqlQuery($rSqlQuery);
$this>SetQueryString();
$this>SetIndexBar();
$this>SetPageInfo();
}
}
//配列型のページングを設定します
プライベート関数 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();
}
}
// データベースタイプの合計行数の計算
プライベート関数 SetDbTotalRowsNum($rSqlQuery) {
$this>mTotalRowsNum = mysql_num_rows( mysql_query($rSqlQuery) );
}
//配列型で総行数を計算します
プライベート関数 SetArrayTotalRowsNum($array) {
$this>mTotalRowsNum = count($array);
}
// 総ページ数を計算します
プライベート関数 SetTotalPagesNum($userPageRowsNum='') {
if( $userPageRowsNum ) {
$this>mPageRowsNum = $userPageRowsNum;
}
$this>mTotalPagesNum = (int)(floor( ($this>mTotalRowsNum1)/$this>mPageRowsNum )+1 );
}
// 現在のページ番号を計算します
プライベート関数 SetCurPageNumber() {
if( $_GET['cur_page'] ) {
$this>mCurPageNumber = $_GET['cur_page'];
}
}
// SQL インターセプト ステートメントを変更します
プライベート関数 SetSqlQuery(&$rSqlQuery) {
$start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
$rSqlQuery .= " LIMIT ".$start_number.",".$this>mPageRowsNum;
}
// インターセプトされた配列を修正します
プライベート関数 SetArray(&$rArray) {
$start_number = ($this>mCurPageNumber1)*$this>mPageRowsNum;
$rArray = array_slice($rArray, $start_number, $this>mPageRowsNum);
}
// データを渡すように $_GET を修正します
プライベート関数 SetQueryString() {
$query_string = $_SERVER['QUERY_STRING'];
if ( $query_string == '' ) {
$this>mQueryString = "?cur_page=";
}
他に{
$this>mQueryString = preg_replace("/&?cur_page=d+/", '', $query_string);
$this>mQueryString = "?".$this>mQueryString."&cur_page=";
}
}
// 設置页码インデックス条
プライベート関数 GetPageIndex() {
if( $this>mTotalPagesNum mIndexBarLength ) {
$first_number = 1;
$last_number = $this>mTotalPagesNum;
}
他に{
$offset = (int)floor($this>mIndexBarLength/2);
if( ($this>mCurPageNumber$offset)
$first_number = 1;
}
elseif( ($this>mCurPageNumber+$offset) > $this>mTotalPagesNum ) {
$first_number = $this>mTotalPagesNum$this>mIndexBarLength+1;
}
他に{
$first_number = $this>mCurPageNumber$offset;
}
$last_number = $first_number+$this>mIndexBarLength1;
}
$last_number;
for( $i=$first_number; $i
if( $this>mCurPageNumber == $i ) {
$page_index .= "".$i." ";
}
他に{
$page_index .= "mQueryString.$i."' style='".$this>mCssIndexBarPage."'>".$i." ";
}
}
$page_index を返す;
}
// 設置页码インデックス条
プライベート関数 SetIndexBar() {
$this>mIndexBar = $this>GetNavFirstButton();
$this>mIndexBar .= $this>GetNavPreButton();
$this>mIndexBar .= $this>GetPageIndex();
$this>mIndexBar .= $this>GetNavNextButton();
$this>mIndexBar .= $this>GetNavLastButton();
}
// 页码インデックス条首页按钮
に到達
プライベート関数 GetNavFirstButton() {
"mQueryString."1'>".$this>mFirstButton" を返します。 ";
}
// 页码索引条上一页按钮
に到達
プライベート関数 GetNavPreButton() {
if( $this>mCurPageNumber>1 ) {
$pre_number = $this>mCurPageNumber1;
}
他に{
$pre_number = 1;
}
return "mQueryString.$pre_number."'>".$this>mPreButton." ";
}
// 页码索引条下一页按钮
を取得
プライベート関数 GetNavNextButton() {
if( $this>mCurPageNumbermTotalPagesNum ) {
$next_number = $this>mCurPageNumber+1;
}
他に{
$next_number = $this>mTotalPagesNum;
}
return "mQueryString.$next_number.">".$this>mNextButton." ";
}
// 到達页码索引条 末页按钮
プライベート関数 GetNavLastButton() {
"mQueryString.$this>mTotalPagesNum.">".$this>mLastButton" を返します。 ";
}
// 設置分页情報
プライベート関数 SetPageInfo() {
$this>mPageInfo ="mCssPageInfoNumFont."'>".$this>mTotalRowsNum." 条情報 | ";
$this>mPageInfo .= "".$this>mPageRowsNum." 条/页 | ";
$this>mPageInfo .= "共 ".$this>mTotalPagesNum." | ";
$this>mPageInfo .= "第 ".$this>mCurPageNumber." 页";
$this>mPageInfo .= "";
}
// 取出页码インデックス条
パブリック関数 GetIndexBar() {
return $this>mIndexBar;
}
// 取出分页情報
パブリック関数 GetPageInfo() {
$this>mPageInfo を返す;
}
}
?>
複制代用コード使用法 1: 複合データベース库使用 (例中の複合的は我自身のデータ库操作类和模版类) // これは 1 つの SQL 询询句、我们来它の询結果作出分页
$sql = "メンバーから * を選択";
// 读取分页类
require_once("pagebreak.php");
// 分页初期化
// $sql は上の句
// 20 は表示される数です
// ページング クラスの初期化を通じて、このクエリ ステートメントに "limit..." が追加されます
$pagebreak = 新しい PageBreak($sql, 20);
// ページングインデックスナビゲーションバーを生成します
$navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
// クエリ結果 (ここでは独自のクラスを使用します。詳細は省略します)
$result = $db>GetFieldsArray($sql)
// クエリ結果を出力します
var_dump($result);
// ページングインデックスナビゲーションバーを出力します
エコー $navbar;
コードの使用法をコピー 2: 出力される配列と一致する // これは SQL クエリ文であり、クエリ結果を取得します
$sql = "メンバーから * を選択";
$result = $db>GetFieldsArray($sql);
//ページングクラスの読み取り
require_once("pagebreak.php");
//ページングの初期化
// $result は上記のクエリの後に得られる結果です
// 20 は各ページに表示される数字です
// ページング クラスの初期化を通じて、この結果配列は自動的に対応するページの情報コンテンツにインターセプトされます
$pagebreak = 新しい PageBreak($result, 20);
// ページングインデックスナビゲーションバーを生成します
$navbar = $pagebreak>GetPageInfo().$pagebreak>GetIndexBar();
// クエリ結果を出力します
var_dump($result);
// ページングインデックスナビゲーションバーを出力します
エコー $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さんの返信内容
質問があるのですが、このようなことですが...どこに書いてありますか?
分からなかったら聞いてください
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]
質問があるのですが、このようなことですが...どこに書いてありますか?
分からなかったら聞いてください
制限....情報を除いて、他のすべては $sql にあります。
SetSqlQuery メソッドは、limit.... コンテンツを $sql ステートメントに自動的に追加できます。