BLOG ENTRY

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

php

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

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

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

ページャーの動作デモ

index.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; ?>

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

Pager.class.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,
        );
    }
}

終わり。

No related posts.

  • 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