
PHPでPEARを使わないページャー(pager)のコード。
・・・ですけど、新しいコード載せたんでたぶんそちらの方がいいです。。下のコードだとたぶん件数が少ないときに正しく動かないっぽいので。。
※total件数はDBからCOUNT(*)でとってくるけど、ここではとりあえず500を代入。
ページャーの動作デモ
<?php
//////////////////////////
// 外部ファイル読み込み
//////////////////////////
include('Pager.class.php');
/////////////////////
// パラメータ設定
/////////////////////
$this_url = htmlspecialchars($_SERVER['PHP_SELF']); //各URIを固定記述する
$params['total'] = 500; //全件数(DBからselectするが、ここでは仮に代入)
if ($_GET['page']) {
$params['curpage'] = $_GET['page'];
} else {
$params['curpage'] = 1;
}
$params['perpage'] = 10; //1ページの表示件数
$params['range'] = 5; //1ページの表示ブロック数
/////////////////
// ページャー
/////////////////
$pager = Pager::getPager($params['total'], $params['curpage'], $params['perpage'], $params['range']);
?>
全<?php echo $params['total']?>件
<?php echo $params['curpage']?>/全<?php echo $pager['total_pages']?>ページ<br />
<?php if ($pager['first_group']) : ?>
<a href="<?php echo $this_url."?page=1" ?>">First</a>
<?php endif; ?>
<?php if ($pager['prev']) : ?>
<a href="<?php echo $this_url."?page=".$pager['prev']?>" ><</a>
<?php endif; ?>
<?php foreach ($pager['pages'] as $v) : ?>
<?php if ($_GET['page'] == $v):?>
<a href="<?php echo $this_url."?page=".$v?>"><b><?=$v?></b></a>
<?php else : ?>
<a href="<?php echo $this_url."?page=".$v?>"><?=$v?></a>
<?php endif;?>
<?php endforeach; ?>
<?php if ($pager['next']) : ?>
<a href="<?php echo $this_url."?page=".$pager['next']?>">></a>
<?php endif; ?>
<?php if ($pager['last_group']) : ?>
<a href="<?php echo $_this_url."?page=".$pager['total_pages']?>">Last</a>
<?php endif; ?>
以下がincludeするクラスファイル
<?php
class Pager
{
function getPager($total, $curpage = 1, $perpage = 10, $range = 5)
{
$total_pages = ceil($total / $perpage);
$offset = ceil($curpage - 1) * $perpage;
if ($curpage > ceil($total_pages - $range/2)) {
$start = $total_pages - $curpage + (ceil($curpage - ($range - 1)));
} else {
$start = ceil($curpage - ($range-1)/2)>1 ? ceil($curpage - ($range-1)/2) : 1;
}
if ($total_pages > $range)
$end = $start + $range - 1;
else
$end = $total_pages;
$pages = range($start, $end ? $end : 1);
$next = $curpage + 1;
$prev = $curpage - 1;
$first_group = 1;
$last_group = $start + $range;
$prev = $prev >= 1 ? $prev : null;
$next = $next <= $total_pages ? $next : null;
$first_group = ceil($curpage - ($range - 1)/2) > 1 ? $first_group : null;
$last_group = $last_group <= $total_pages ? $last_group : null;
return array(
'total_pages' => $total_pages,
'curpage' => $curpage,
'pages' => $pages,
'prev' => $prev,
'next' => $next,
'first_group' => $first_group,
'last_group' => $last_group,
'offset' => $offset,
'limit' => $perpage,
);
}
}
終わり。
No related posts.
[...] PHPでPEARを使わないPager(ページ送り機能)です。 前にも書いたけど、たぶんこっちの方がよろしいかと。前のは総件数が少ないときの動きが変だったような気がする。。 [...]
type:ピンバック [ ]