Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 小技集

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

投稿日:


いつもみているウノウラボで、ちょっと(?)なエントリーがあったので書いとく。

PEAR::Pagerでは最初にインスタンスを生成する際にいろんなオプションを指定できるのですが、この並び順を入れ替えるオプションはありません。(多分)でも、どうにかして順番を入れ替えたいので、うまい方法を探してみましょう。

via: ウノウラボ Unoh Labs: 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)

via: PEAR :: Manual :: Pager::getLinks

というように、「最初のページ」「戻る」「ページ」「次へ」「最後のページ」などのリンクタグがそれぞれ配列に入っています。なので、単純に自分の好みにあった位置に並び替えるだけ。
ウノウラボ 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' => '&lt;&lt;',
'nextImg' => '&gt;&gt;',
'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'] . "&nbsp;&nbsp;";
echo $links['first'];
echo $links['pages'];
echo $links['last'];
echo "&nbsp;&nbsp;" . $links['next'];
echo "</p>";
?>
</body>
</html>

Pagerはパラメータが沢山あって分かりにくいけど使いこなすと超便利。
おすすめです。

-PHP, 小技集

執筆者:


  1. Qやん より:

    Pagerですかー
    便利ですよね。でも、パラメタが多すぎて、基本的な使い方しかしてません(笑
    ところで、Pagerを使う場合に、同じパラメタでリクエストをした場合でも、
    GETとPOSTでは違うリンクが生成されてしまうのは何でなんだろうねぇ・・
    どっちでもリクエストしても同じリンクが生成されるようにしたいなあと思ったのですが、、、

  2. yager より:

    >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
    あ、検討違いの回答だったらスミマセン。

comment

メールアドレスが公開されることはありません。

関連記事

【更新】ソーシャルメディアに共有するボタンの設置方法(Twitter, facebook, mixi, GREE, Evernote, Google+, Tumblr, Pinterest, はてブ)

ソーシャルメディアの各サービスがこぞって「いいね!」などの共有ボタンをリリースしています。ブログやニュースメディアでも頻繁に目にする昨今ですが、色々なソーシャルボタンの設置方法をまとめて紹介したいと思 …

no image

Deliciousでサイト内ブックマーク数の合計を取得するPHPサンプル

はてなブックマークにはサイト内のブックマーク数合計を表示してくれるはてブカウンターというのがあります。他のSBMには無い機能ですが、サイトの人気度を示す良い指標だと思っています。 参考:はてブ数100 …

[N]ネタフル x [S]シカマケ = ブログデザイン勉強会 第2回:テーマ曲を決めて自分を更に深堀

昨日はブログデザイン勉強会の第2回がありました。 まずは、前回のおさらいですが1枚絵に自己紹介を描いてきて皆さんに発表。 それから、今のサイトと比べてどうかという事を他の方からご意見いただきました。 …

Re2: 第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く

修正を重ねている「第3回:JavaScriptで画像サイズと合ったポップアップウィンドウを開く」で作った関数ですが、ようやく完成系になったかもしれません。 今回は画像(IMGタグ)のonloadの扱い …

no image

PostgreSQLでCSVやTSV用に改行コードを取り除く方法

DBからCSV(カンマ区切り)やTSV(タブ区切り)でデータを出力するってことがたまにあるのですが、出力するデータに改行が入っているとCSVやTSVのフォーマットが崩れてしまってエクセルなどでうまく開 …

スポンサードリンク

スポンサードリンク