BLOG ENTRY

PHPでPEARを使わないページャー(pager)[PHP]

php

PHPでPEARを使わないページャー(pager)のコード。

・・・ですけど、新しいコード載せたんでたぶんそちらの方がいいです。。下のコードだとたぶん件数が少ないときに正しく動かないっぽいので。。

※total件数はDBからCOUNT(*)でとってくるけど、ここではとりあえず500を代入。

ページャーの動作デモ

index.php

[php]
<?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; ?>
[/php]

以下がincludeするクラスファイル

Pager.class.php

[php]
<?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,
);
}
}

[/php]

終わり。

  • name:PHPでPEARを使わないPager(ページャー)その2[PHP] | Web&MUSICブログ QUALL
  • date:2009/06/26
  • […] PHPでPEARを使わないPager(ページ送り機能)です。 前にも書いたけど、たぶんこっちの方がよろしいかと。前のは総件数が少ないときの動きが変だったような気がする。。 […]

  • type:ピンバック [ ]

    WRITE COMMENT


    (required)


    (required)


    (required)

    MENU

    veltica creative of twitter