maki-o memo

制作に関する私的なメモです

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}";
    }
}

?>

これを、適当に加工すればページャー機能が実装できます。


プロフィール

フロントエンドエンジニア

Tomokazu Makita

名古屋でフリーランスでWeb制作してます。 フロントエンドのことを主にやってます。
a-blog cmsを使用したサイト制作が得意です。
お仕事のご相談随時受付中。

雪山大すき。冬は雪山の合間に仕事します。
財布はいつも吹雪です。

エントリーリスト

タグ