phpでページャー実装
ページャーのクラスを作ったのでメモ。
<?php
class pager {
var $link_ary;
var $nextp;
var $prevp;
var $sql;
//引数に、表示するレコード数($limit)、表示するページNo($pno)、セレクトするテーブルの全件抽出の為のSQL文($fselect)を指定します
function pager ($limit,$pno,$fselect) {
$this->link_ary = array();
$this->nextp = "";
$this->prevp = "";
//$pno 入ってなかった時の為に、デフォルトで1を代入。
if ($pno < 1 || $pno == "") {
$pno = 1;
}
//レコード全件抽出
$result = mysql_query($fselect);
$all_rec = mysql_num_rows($result);
//全件レコード÷表示するレコード で、全ページ数を出す
if ($all_rec != 0) {
$pagesu = ceil($all_rec / $limit);
} else {
$pagesu = 1;
}
//ページ数が1ページを超えるなら、
if ($pagesu > 1) {
//ページ数が10以下の場合
if ($pagesu <= 10) {
//全ページのページ番号の配列を作ります
for ($i=1 ; $i<=$pagesu ; $i++) {
$this->link_ary[$i]["page"] = $i;
if ($i != $pno) {
$this->link_ary[$i]["plink"] = $i;
}
}
//ページ数が11以上の場合
} else {
$sti = $pno - 4; //開始ページ番号
$edi = $pno + 5; //終了ページ番号
$flag = 0;
//開始ページが、1以下になる場合は強制的に変数変更
if ($sti <= 1) {
$sti = 1;
$edi = 10;
$flag = 1;
//終了ページが、全ページ数以上になる場合は強制的に変数変更
} elseif ($edi >= $pagesu) {
$sti = $pagesu - 9;
$edi = $pagesu;
$flag = 2;
}
//表示ページを真ん中にした、10ページ分のページ配列を作成
for ($i=$sti;$i<=$edi;$i++) {
$this->link_ary[$i]["page"] = $i;
if ($i != $pno) {
$this->link_ary[$i]["plink"] = $i;
}
}
//フラグの結果で、各ページリンクの前後に"..."の挿入を判断
switch ($flag)
{
case 1:
array_push($this->link_ary,array("page"=>"..."));
break;
case 2:
array_unshift($this->link_ary,array("page"=>"..."));
break;
default:
array_unshift($this->link_ary,array("page"=>"..."));
array_push($this->link_ary,array("page"=>"..."));
}
}
//表示ページの前と後のページ番号を入れる
if ($pno < $pagesu) {
$this->nextp = $pno+1;
}
if ($pno != 1) {
$this->prevp = $pno-1;
}
}
//sql文のオフセットを出す
$offset = $limit * ($pno-1);
//sql文を出す
$this->sql = "{$fselect} LIMIT {$limit} OFFSET {$offset}";
}
}
?>
これを、適当に加工すればページャー機能が実装できます。