ページング処理をPEARで
データベースからデータを取得する際、データの件数が多い場合はページング処理をして出力するのは当然だ。今まではこの記述を全て自前で書いていた(「データ取得時のページング処理」を使っていた)。
もちろんPEARの中に、Pagerというページング処理をおこなうためのクラスがあることは知っていた。しかしつい最近まで「Pagerを使う場合は事前にデータをすべてDBからフェッチしておかないといけないから、大量データのあるテーブルの場合は役に立たない」と考えていた(ということで使わなかった)。
実は心の中で「こんな当たり前の処理、絶対に簡単にできるためのツールがあるはず」と思っていたけど、探したり、調べたりするのが面倒だったから、結局自前で書いていた。
今日一大決心(というほどのことではないけれど)をして探してみた!。そしたらあっさり見つかった。PEARのPagerをラッパーしたクラスとのことだった。
Pager_Wrapper.php
これを使うとなんと超簡単。あっという間にページング処理をやってくれる。
こんな感じ。
//Pagerを使う際のオプションを設定(他にもいろいろあり)
$pagerOptions=array();
$pagerOptions[‘mode’]=’Sliding';
//1ページに10レコードずつ
$pagerOptions[‘perPage’]=10;
//自動で生成するリンクの数(「次ページを入れて前後に3つずつ」ということ)
$pagerOptions[‘delta’]=3;
//表示したいページ番号
$pagerOptions[‘currentPage’]=1;
$sql=”SELECT shohin_id,shohin_name FROM tbl_shohin ORDER BY shohin_id;”;
$pagedData=Pager_Wrapper_MDB2($myDB,$sql,$pagerOptions);
print_r($pagedData);
たったこれだけ。これだけで必要なデータは全て$pagedDataに配列で格納されてくる。すご〜い。
これを作った人に感謝。この紹介記事を書いた人に感謝。検索エンジンに感謝。探す勇気を出した自分に感謝。
2007/01/09 at 7:28 PM
Pagerにデータを全て渡さなくとも
totalItemsに総件数だけ渡してリンクを生成すれば良いかと思います。(当方ではMysqlのSQL_CALC_FOUND_ROWSにて総件数を取得しそれを渡してリンクを生成して使用しています。)
2007/01/10 at 2:06 AM
ご教示ありがとうございます。それだけでもリンクは作成できるのですね。トライしてみます。
ただできれば簡単に全部処理できないかな、と考えています(「簡単」の基準は人それぞれですけど)。とりあえず件数だけ取得してPagerに渡して各パラメータを作ってもらい、後づけでデータを取得するとか。
時間を作って試してみたいと思います。