Pagerを使ってイケてないコードを書いていた
PEARのPagerは「全件の配列を渡して使う」ものだと思っていた。だから、件数が多いところではちょっと使えないし、PEARのディレクトリのdoc/Pager/examples/Pager_Wrapper.phpもなんだか使うのは勇気がいるなあという感じで、しょうがないから自分たちでなんとかするかと思っていた。
REQUIRED options are:
fileName IF append==FALSE (default is TRUE)itemData OR totalItems (if itemData is set, totalItems is overwritten)
と書いてある。つまり、itemDataで全件の配列を渡したいるところは、totalItemsとして件数だけ渡してあげればちゃんとページング処理をやってくれるということだ。もちろん、getPageDataでページ内に表示するためのデータだけ切り出して受け取ることはできないが、GETで受け取るページ番号からOFFSETを設定する。
/* PEAR Pagerのサンプル */ require_once 'lib/Pager/Pager.php'; //1ページ内に表示する項目数 $perPage = 2; //全件数 $totalItems = 10; //今のページは? $currentPage = (integer)$_GET['pagenum']; //このページ内で表示する項目を取得 //普通はDBからデータを取得したりする $array = array(); for($i = 1; $i <= $perPage; $i++){//ここは$totalItemsじゃない! array_push($array, $i); } //Pagerに渡すパラメータ $params = array( 'mode' => 'Jumping', //他にSlidingを指定することもできる 'perPage' => $perPage, //1ページ内に表示する項目の数 'delta' => $totalItems, //項目の合計 'totalItems' => $totalItems, 'urlVar' => 'pagenum', //ページ番号を受け渡す際のGETのパラメータ // 'itemData' => $array,//使わねえよ 'currentPage' => $currentPage, // 'extraVars' => $extra //GETで受け渡す他の値があればここにセット ); $pager = & Pager::factory($params); $links = $pager->getLinks(); foreach($array as $key => $val){ //do something sweet } echo $links['pages'];//ココでナビゲーション機能を表示 //echo $links['back'] . " " . $links['next'];//こんな表示もできる
恥だ恥だ恥だ。
コメントを残す