PHPカスタムページング関数
リストページを書くたびに、ほぼページングプログラムを書かなければなりません。最近、Xiaoyang は最終的に、ページング関数をカスタマイズして「pageft.php」ファイルに保存することを決定しました。ページングを使用したい場合は、「pageft.php」ファイルを直接インクルードしてこの関数を呼び出します。 Xiaoyang がこの関数を書いたとき、彼はプログラムの移植性と使いやすさに最大限の注意を払いました。 以下は Xiaoyang によって書かれた関数です:
//ファイルの繰り返しインクルードによるエラーを避けるために、関数が存在するかどうかを判断する条件を追加します:
if(!function_exists(pageft)){
//関数pageft()を定義します。3つのパラメータの意味は次のとおりです:
//$totle: メッセージの総数;
//$displaypg: 各ページに表示される情報の数、ここでのデフォルト設定は 20;
//$url: ページング ナビゲーションのリンクは、別のクエリ情報「page」を追加することを除いて、この URL と同じです。
// デフォルト値はこのページのURL(つまり$_SERVER["REQUEST_URI"])に設定されるべきですが、デフォルト値の右側は定数のみなので、デフォルト値は空の文字列に設定されますを選択し、このページの URL を設定します。
関数 pageft($totle,$displaypg=20,$url=''){
//いくつかのグローバル変数を定義します:
//$page: 現在のページ番号;
//$firstcount: (データベース) クエリの開始項目;
//$pagenav: ページナビゲーションバーコード、関数内では出力されません;
//$_SERVER: このページのURL「$_SERVER["REQUEST_URI"]」を読み取るために必要です。
グローバル $page,$firstcount,$pagenav,$_SERVER;
//ここの「$displaypg」を関数外からアクセスできるようにするには、グローバル変数として設定します。変数がグローバル変数として再定義されると、元の値が上書きされるため、ここで再割り当てされることに注意してください。
$GLOBALS["displaypg"]=$displaypg;
if(!$page) $page=1;
// $url が空の値であるデフォルト値を使用する場合、割り当てられる値はこのページの URL です:
if(!$url){ $url=$_SERVER["REQUEST_URI"];}
//URL解析:
$parse_url=parse_url($url);
$url_query=$parse_url["query"] //URLのクエリ文字列を別途取得します
;if($url_query){
//URL にはページ番号情報が含まれている可能性があるため、新しいページ番号情報を追加するにはそれを削除する必要があります。
//ここでは正規表現が使用されています。「PHP の正規表現」(http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html) を参照してください
$url_query=ereg_replace("(^|&)page=$page","",$url_query);
//処理された URL のクエリ文字列を元の URL のクエリ文字列に置き換えます:
$url=str_replace($parse_url["query"],$url_query,$url);
// URL の後にページクエリ情報を追加しますが、割り当てを待ちます:
if($url_query) $url.="&page"; else $url.="page";
}else {
$url.="?page";
}
ページ数計算:
$lastpg=ceil($totle/$displaypg); //最後のページも総ページ数になります
$page=min($lastpg,$page);
$prepg=$page-1; //前のページ
$nextpg=($page==$lastpg ? 0 : $page+1); //次のページ
$firstcount=($page-1)*$displaypg;
//ページングナビゲーションバーコードの開始:
$pagenav="「.($totle?($firstcount+1):0)."-".min($firstcount+$displaypg,$totle)." レコード、$totle レコードの合計を表示します
「;
」//ページが 1 つしかない場合は、関数から飛び出す:
if($lastpg
$pagenav.=" ホーム ";
if($prepg) $pagenav.=" 前のページ "; else $pagenav.=" 前のページ ";
if($nextpg) $pagenav.=" 次のページ "; else $pagenav.=" 次のページ ";
$pagenav.=" 最後のページ ";
// ジャンプリストをドロップダウンし、ループ内のすべてのページ番号をリストします:
$pagenav.="$in"; for($i=1;$i
}
}
?>
ページング関数は「pageft.php」として記述され、保存されています。ページ分割したい場合は、それを含めてpageft()関数を呼び出します。ただし、何も出力されませんが、使用するためのいくつかのグローバル変数 ($firstcount、$displaypg、$pagenav) が生成されます。次の例はその使用法を示しています:
//(前の手順は省略)
include("pageft.php"); //「pageft.php」ファイルをインクルードします
//情報の総数を取得します
$result=mysql_query("select * from mytable");
$total=mysql_num_rows($result);
//pageft()を呼び出して1ページあたり10件の情報を表示し(デフォルトの20件を使用する場合はこのパラメータは省略可能)、このページのURLを使用します(デフォルトなので省略します)。
pageft($total,10);
//生成されたグローバル変数が便利になります:
$result=mysql_query("select * from mytable limit $firstcount,$displaypg ");
while($row=mysql_fetch_array($result)){
//(リスト内容省略)
}
//ページングナビゲーションバーコードを出力:
echo $pagenav;
//(以下の手順は省略)
?>