PHPのページャー処理にPearのPagerを使う
ずーっと前から気になっていたにもかかわらず自前の微妙なページャーを使っていたんだけど、ようやくPearに用意されているPagerモジュールを使ってみた。
以下の様な感じで使う。(CakePHPで利用)
<?php // $dataに対象データをセットしておく $options = array ( "perPage" => 20, "itemData" => $data, "mode" => "Sliding", "prevImg" => "«", "nextImg" => "»", "firstPagePre" => "", "firstPageText" => "‹", "firstPagePost" => "", "lastPagePre" => "", "lastPageText" => "›", "lastPagePost" => "", "clearIfVoid" => true, "httpMethod" => 'POST', ); $pager =& Pager::factory($options); // 各ページへのリンク $navi = $pager->getLinks(); $this->set('pages', $navi['all']); // データ数 $this->set('num', $pager->numItems()); // ページオフセット(*件-*件表示) $this->set('offset', $pager->getOffsetByPageId()); // 1ページで表示される検索結果の配列 $this->set('list', $pager->getPageData());
HTML
<?php e($offset[0]);?> - <?php e($offset[1]);?>件 表示<br> <?php e($pages);?>
結果
細かいパラメーターの説明はこちらが詳しい。
POSTの時に一個気をつけないといけないことがあって、リンククリック時に日本語が勝手にURLエンコードされるので直接ソースの該当箇所をコメントアウトする。(Pager/Common.phpの950行目辺り)
<?php // am I forgetting any dangerous whitespace? // would a regex be faster? // if it's already encoded, don't encode it again // 以下をコメントアウトする //if (!$this->_isEncoded($escapedData)) { // $escapedData = urlencode($escapedData); //}
以上で問題なく動いたのでかなり簡単だ。
参考サイト
PEAR Pagerのトラブル回避 : アシアルブログ
低予算で始められるおすすめのFX口座を紹介しています。
http://s2fx.com/ranking/856.html