PEAR::Pager で生成されるリンクを並び替える方法

- ウノウラボ 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'];
}


  このようにすることで、以下のような出力が得られます。

  PEAR::Pager

  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' => '&lt;前の20件',
    'nextImg' => '次の20件&gt;',
    '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'];
}


  出力は次のようになります。

PEAR::Pager