php :: ページ送りするやつ(pager)のクラスをつくった
2009/9/15 (Tue) at 6:54 pm
ながーい行数のデータを複数ページにまたがって表示するときに使うページ番号のリンクナビゲーションをpagerとかpagenationとかいいます。あれがないとページ送りができなくて困ります。非常によく使うものですが、これを自作するのはけっこうめんどくさい!いや、自分でやらなくてもありものがいろいろ出てるわけですが↓
PEAR::Pager (定番!)
jQuery Plugin::PAGINATION (jQueryだからお手軽!)
この度、勉強としてclassを自作してみました。データの総数を引数に渡すと<ul class="pager"><li>xxx</li>...</ul>みたいなhtmlを返します。それをcssでビューティに仕上げて一丁アガリ。引数はデータ総数だけですが、pagerの長さ、1ページに表示する行数、クラス名、クエリ文字列などをオプション指定できます。詳しくは後述。
いちおういっときますが、不肖、私、配列をどーこーするのが苦手です。冗長なコードだと思います。もう少し短くカッコよく書く方法があるんだろうなーと心のざわめきを覚えつつソースを公開しております。なにかありましたら、ツッコミよろしく。デモはこちら↓
http://1-pixel.com/sample/php-pager/sample.php
pagerにはいくつかのパターンがあります。いろんなサイトのpagerを観察すると、似てるけど動作が少し違うところがあったりします。みなさん工夫していらっしゃるのですね。今回のコレは、デモをいぢってもらえればわかりますが、ズラーと並べてみると以下のようなかんじで変化します。ページが進んでいくと、カレントページの前後へのリンクがあることに加え、... をはさんで、そのまたずーっと前のいちばん最初、ずーっと後ろのいちばん最後へのリンクが出ます↓
classファイルはこちらから↓
使い方
pager.class.phpの中に記述されているメンバ変数を書きかえて設定します。以下の変数があります↓
- public $linksNum = 6; // int, 番号リンクをいくつ表示させるか
- public $parOnePage = 50; // int, 1ページに表示する行数
- public $topEnd = 2; // int, 「いちばん最初」「いちばん最後」のところにいくつ表示させるか
- public $between = '...'; // string, わかりますよね。なんて説明すりゃいいのか。
- public $prevString = 'PREV'; // string, これもわかるでしょう。
- public $nextString = 'NEXT'; // string, これもわかる!
- public $query = 'page'; // string, ページ番号を指定するクエリ文字列
- public $class = 'pager'; // string, ulタグに入るクラス値
これらを決めたら以下のようにインスタンスをつくりdoIt()というメソッドを呼びます。doIt()に対する必須の引数はひとつだけ。$totalはすべての行数(データ総数)です。
$Pager = new Pager; $total = 2000; // データ総数 $str = $Pager->doIt($total);
これで、$strにリストタグのhtml文字列が入ります。こんなの↓
<ul class="pager"> <li><span>1</span></li> <li><a href="/sample/php-pager/sample.php?page=2">2</a></li> <li><a href="/sample/php-pager/sample.php?page=3">3</a></li> <li>...</li> <li><a href="/sample/php-pager/sample.php?page=159">159</a></li> <li><a href="/sample/php-pager/sample.php?page=160">160</a></li> <li><a href="/sample/php-pager/sample.php?page=2">NEXT</a></li> </ul>
これをechoするなりなんなり。ulタグに'pager'というクラス名がつきます。カレントページだけaタグの代わりにspanが入ります。それを元にcssで装飾します。デモのhtmlソースでcssを見れるんでそちらを参考にどうぞ。生成されるリンクの文字列は以下のようになります↓
(開いているファイルへのパス)?page=(番号)
urlに他のクエリ文字列を含めたいなら第二引数に配列で指定します。こんなかんじで↓
$Pager = new Pager; $total = 2000; $query = array( 'sort' => 'descend', 'misc' => 'orange', ); $str = $Pager->doIt($total, $query);
これでやるとurlはこうなります↓
(開いているファイルへのパス)?sort=descend&misc=orange&page=(番号)
※でも、pagerを呼び出したurlにfoo=barナントカのクエリがついてる場合はそのまま引き継がれるので、いちいち指定する必要はないです。
メンバ変数のオプション指定は、いったんキメたらそう変えないもんだと思うんでpager.class.phpに直書きするという仕様にしたのですが、メソッドを呼ぶ度に値を変えたいときがあるかもしれません。そのときはインスタンス作成のときに引数を渡して、メンバ変数を変えることもできます。以下のようにやりますと、$optionsで指定されたものだけ上書きされます↓
$options = array( 'linksNum' => 10, 'prevString' => '前へ', 'nextString' => '次へ', ); $Pager = new Pager($options); $total = 2000; $str = $Pager->doIt($total);
だいたいこんなふうに使います。
あ、mod_rewriteなどを使ってですね、こんなかんじのurlにするパターン↓
http://www.yourdomain.com/pages/11
みたいなヤツには対応してませんので、コレ系でやるならば、doIt()メソッドの後半部分を変える必要があります。
てわけでした。
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)
