- summary リソースのページングと表示順
- sidebar TableOfBlogTutorial
`BEAR_Query`でリソースのページングと表示順をコントロールする機能を追加します。
リソースのreadインターフェイスの実装を憶えてますか?
これにページング機能を追加するために、この利用コードのSQLに*変更はありません。*インジェクター(初期化メソッド)での設定が変わるだけです。
App/Ro/Pager.php
これでページングとソートを指定しています。ページング部分に限れば2つだけです。
以下のようにpager=0にするとページング機能は働かず最初の10件のリソースになります。
例えばブログの記事を考えています。記事リソースは場所によってリソース表現が変わります。
|| *内容* || *ページング* || *pager* || *perPage* || 表示順 || || トップページ || 最近記事のリソースが最新3件 || 0 || 3 || -id || || 今月の記事ページ || ページングなし || 0 || 0 || +id || || 記事本体ページ || DBページング || 1 || 10 || -id ||
設定(準備)が違うだけでクエリーそのものを変えずに、それぞれの表現で取得しています。このサンプルでは別クラスにしてインジェクターをオーバーライドしてますが、複数のインジェクターをもちそのインジェクターを切り替えて使う事もできます。
Note:
`BEAR_Query`は使用されるSQLのORDER句より前の部分を本質的で固定的なもので、その後ろを表現のための流動的で装飾的なものととらえそれぞれを利用と準備で分け、再利用性を高めています。
Note:
件数を求めるためにCOUNTクエリーを行う時にも利用コードに変更はありません。詳しくは[db]をご覧ください。
Note:
BEARではリソースのページングの記述はリソース側のみに閉じ込められており、ページコントローラー側に記述はありません。
ページャーを使うと$pagerという変数がテンプレートにアサインされます。
||$pager.info || ページング情報 || ||$pager.links || ページングナビゲーション ||
効果的なSEOのため、クローラーにページング情報を教えるためにはHTMLの`<head></head>`タグ内に`<link></link>`タグ設置します。
どのような変数がアサインされてるかはBEAR Dev画面を見ても確認できます。
ページングはフルスクラッチで実装するのになかなか面倒な機能です。フレームワークを使うとより簡単に設置できます。
* <a href="http://www.symfony-project.org/jobeet/1_2/Propel/ja/07" target="_blank">Symfony1 - リストのパジネーション</a> * <a href="http://book.cakephp.org/ja/view/164/%E3%83%9A%E3%83%BC%E3%82%B8%E4%BB%98%E3%81%91-Pagination" target="_blank">CakePHP - ページ付け(Pagination)</a> * <a href="http://framework.zend.com/manual/ja/zend.paginator.usage.html" target="_blank">Zend Framework - データコレクションのページ処理</a> * <a href="http://www.ibm.com/developerworks/library/x-agavipt5/" target="_blank">Agavi - Introduction to MVC programming with Agavi, Part 5: Add paging, file uploads, and custom input validators to your Agavi application</a> * <a href="http://d.hatena.ne.jp/tjtjtjofthedead/20110322/1300805961" target="_blank">Yii - ページネーション</a>
* [db]