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'];
}
  出力は次のようになります。

			
			
