いつもみているウノウラボで、ちょっと(?)なエントリーがあったので書いとく。
PEAR::Pagerでは最初にインスタンスを生成する際にいろんなオプションを指定できるのですが、この並び順を入れ替えるオプションはありません。(多分)でも、どうにかして順番を入れ替えたいので、うまい方法を探してみましょう。
うまい方法を探すために、bokkoさんはいきなりソースを読み始めてしまったのですが(!)、それマニュアルみれば分かるから。日本語で書いてあるし。
・PEAR :: Manual :: 導入
→サンプルコードもあるから、ほとんどこのページで分かるはず。
・PEAR :: Manual :: Pager::factory
→「いろんなオプション」はここに全部書いてある
・PEAR :: Manual :: Pager
→関数の一覧。色々あるでしょ?
えー、まずライブラリのhackは「最終手段」なのでなるべくやらずにすむ方法を考えた方がいいです。どうしても、書き換えなきゃいけない場合は、extendするなりして元のクラスを汚さないようにするべきです。
なんでか?
バージョンアップしたらどうすんだい?
ライブラリをHackしなくてもできる、Pagerの並び替え
前述のサンプルにも書いてありますが、通常Pagerでリンクタグを取得するためには以下のように getLinks()関数を使います。
$pager = & Pager::factory($params); $links = $pager->getLinks();
で、この$linksの中には、
The array has the following keys:
– back
– pages (single pages numbered)
– next
– first
– last
– all (single pages + back/next)
– linktags (HTML head links)
というように、「最初のページ」「戻る」「ページ」「次へ」「最後のページ」などのリンクタグがそれぞれ配列に入っています。なので、単純に自分の好みにあった位置に並び替えるだけ。
ウノウラボ Unoh Labs: PEAR::Pagerで生成されるリンクを並び替えると同じ並び順にしたいのならば、
$pager =& Pager::factory($params); $links = $pager->getLinks(); echo $links['back'] . " "; echo $links['first']; echo $links['pages']; echo $links['last']; echo " " . $links['next'];
とすればOK。
・一応サンプル作りました。>サンプル画面
・そのソース
<html> <head> <meta http-equiv=content-type content="text/html; charset=UTF-8" /> <title>PEAR :: Pager :: Sample</title> </head> <body> <?php require_once('Pager/Pager.php'); $params = array( 'mode' => 'sliding', 'delta' => 5, 'perPage' => 5, 'spacesBeforeSeparator' => 1, 'spacesAfterSeparator' => 1, 'prevImg' => '<<', 'nextImg' => '>>', 'totalItems' => '1000' ); $pager =& Pager::factory($params); echo "<p>1)<br />\n" . $pager->links . "</p>\n"; $links = $pager->getLinks(); echo "<p>2)<br />\n" . $links['all'] . "</p>\n"; echo "<p>3)<br />\n"; echo $links['back'] . " "; echo $links['first']; echo $links['pages']; echo $links['last']; echo " " . $links['next']; echo "</p>"; ?> </body> </html>
Pagerはパラメータが沢山あって分かりにくいけど使いこなすと超便利。
おすすめです。
Pagerですかー
便利ですよね。でも、パラメタが多すぎて、基本的な使い方しかしてません(笑
ところで、Pagerを使う場合に、同じパラメタでリクエストをした場合でも、
GETとPOSTでは違うリンクが生成されてしまうのは何でなんだろうねぇ・・
どっちでもリクエストしても同じリンクが生成されるようにしたいなあと思ったのですが、、、
>Qやんさん
> 便利ですよね。でも、パラメタが多すぎて、基本的な使い方しかしてません(笑
汎用的にしようとするとパラメータが多くなっちゃうのはしょうがないんでしょうかね?w
> ところで、Pagerを使う場合に、同じパラメタでリクエストをした場合でも、
> GETとPOSTでは違うリンクが生成されてしまうのは何でなんだろうねぇ・・
PagerはGETの場合、デフォルトでqueryString(GETのパラメータ)をそのまま引き継ぐみたいなので、POST/GETではパラメータが付く/付かないの差がでちゃうと思います。
この辺は、Pagerの初期化の時に、
“append” => false
“fileName” => “hogehoge.php”
とかをくっつけるとうまくいくかもです。
http://pear.php.net/manual/ja/package.html.pager.factory.php
あ、検討違いの回答だったらスミマセン。