PEAR::Pager で生成されるリンクを並び替える方法
2007-11-03-1: [PHP]
- ウノウラボ Unoh Labs: PEAR::Pagerで生成されるリンクを並び替える
http://labs.unoh.net/2007/11/pearpager.html
上記エントリで、PEAR::Pager で生成されるリンクを並び替えるために Pager_Common クラスの Build() メソッドを書き換える方法が紹介されていました。
そこで、ここでは Build メソッドを書き換えずに、getLinks() メソッドを利用して、リンクを並び替える (任意の項目を任意の順序で表示する) 方法を紹介します。
上記エントリのように以下の順序で出力する方法です。
前のページ [最初のページ] n ~ m 番目のページ [最後のページ] 次のページ
require_once 'Pager/Pager.php';
$params = array(
'mode' => 'sliding',
'delta' => 5,
'perPage' => 5,
'prevImg' => '<<',
'nextImg' => '>>',
'totalItems' => 1000,
'spacesBeforeSeparator' => 1,
'spacesAfterSeparator' => 1,
);
$pager =& Pager::factory($params);
$links = $pager->getLinks();
if ($links['pages'] != '') {
echo $links['back'], ' ', $links['first'], $links['pages'], $links['last'], ' ', $links['next'];
}
このようにすることで、以下のような出力が得られます。
getLinks() メソッドの戻り値を利用して、任意の順序で出力するだけです。
getLinks() メソッドは以下のような連想配列を返します。
back | 前のページへのリンク |
pages | n ~ m 番目のページへのリンク ($pager->links と同じ) |
next | 次のページへのリンク |
first | 最初のページへのリンク |
last | 最後のページへのリンク |
linktags | サイトナビゲーション用のリンク (参考) |
linktags は以下のようなものが返されます。
<link rel="first" href="./pager.php?pageID=1" title="first page" />
<link rel="previous" href="./pager.php?pageID=7" title="previous page" />
<link rel="next" href="./pager.php?pageID=9" title="next page" />
<link rel="last" href="./pager.php?pageID=200" title="last page" />
このように getLinks() メソッドの戻り値をうまく使えば、任意の項目を任意の順序で表示することができます。
ちなみに私が好んで指定するオプションは以下のようなものです。最初/最後のページへのリンクは表示しないことも多いです。
require_once 'Pager/Pager.php';
$params = array(
'mode' => 'sliding',
'perPage' => 20,
'delta' => 5,
'urlVar' => 'p',
'separator' => ' |',
'curPageSpanPre' => '',
'curPageSpanPost' => '',
'prevImg' => '<前の20件',
'nextImg' => '次の20件>',
'firstPageText' => '最初',
'firstPagePre' => '[',
'firstPagePost' => ']',
'lastPageText' => '最後',
'lastPagePre' => '[',
'lastPagePost' => ']',
'spacesBeforeSeparator' => 0,
'spacesAfterSeparator' => 1,
'totalItems' => 1000,
'altFirst' => '最初のページへ移動',
'altPrev' => '前のページへ移動',
'altNext' => '次のページへ移動',
'altLast' => '最後のページへ移動',
'altPage' => 'ページ',
);
$pager =& Pager::factory($params);
$links = $pager->getLinks();
if ($links['pages'] != '') {
echo $links['first'], $links['back'], ' | ', $links['pages'], ' | ', $links['next'], ' ', $links['last'];
}
出力は次のようになります。