読者です 読者をやめる 読者になる 読者になる

PHPのページャー処理にPearのPagerを使う

ずーっと前から気になっていたにもかかわらず自前の微妙なページャーを使っていたんだけど、ようやくPearに用意されているPagerモジュールを使ってみた。

以下の様な感じで使う。(CakePHPで利用)

<?php
// $dataに対象データをセットしておく

$options = array (
   "perPage"       => 20,
   "itemData"      => $data,
   "mode"          => "Sliding",
   "prevImg"       => "&laquo;",
   "nextImg"       => "&raquo;",
   "firstPagePre"  => "",
   "firstPageText" => "&lsaquo;",
   "firstPagePost" => "",
   "lastPagePre"   => "",
   "lastPageText"  => "&rsaquo;",
   "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);?>

結果
f:id:nkawamura:20131001165812p:plain

細かいパラメーターの説明はこちらが詳しい。

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