使用法
データコレクションのページ処理
ページ処理を行うには、Zend_Paginator
がデータにアクセスするための汎用的な方法が必要です。
そのため、データへのアクセスはすべてデータソースアダプタを用いて行います。
Zend Framework には、いくつかのアダプタが標準で同梱されています。
Zend_Paginator 用のアダプタ
アダプタ
説明
Array
PHP の配列を使用します。
DbSelect
Zend_Db_Select
のインスタンスを使用し、配列を返します。
DbTableSelect
Zend_Db_Table_Select
のインスタンスを使用し、
Zend_Db_Table_Rowset_Abstract
のインスタンスを返します。
これは、結果セットについての追加情報
(カラム名など) を提供します。
Iterator
Iterator
のインスタンスを使用します。
Null
データのページ処理を管理する際に Zend_Paginator
を使用しません。その場合でもページ処理コントロールの機能を使うことはできます。
指定したクエリにマッチするすべての行を取得するのではなく、
DbSelect アダプタや DbTableSelect アダプタは
現在のページの表示のための必要最小限のデータのみを取得します。
そのため、マッチする行の総数を得るための別のクエリが動的に生成されます。
しかし、総数を直接指定したり、総数を求めるクエリを直接指定したりすることもできます。
詳細な情報は、DbSelect アダプタの
setRowCount() メソッドを参照ください。
Zend_Paginator のインスタンスを作成するには、
コンストラクタでアダプタを指定しなければなりません。
利便性を確保するために、Zend Framework に同梱されているアダプタ用の静的メソッド
factory() も用意されています。
Null アダプタの場合は、
データコレクションのかわりに要素数をコンストラクタで指定します。
この状態でも技術的には既に使用可能ですが、
ユーザが要求したページ番号をコントローラのアクション内で教えてやる必要があります。
これにより、データを読み進めていくことが可能となります。
setCurrentPageNumber($page);
]]>
ページ番号は URL で指定するのがもっともシンプルな方法でしょう。
Zend_Controller_Router_Interface
互換のルータを使うことを推奨しますが、
それが必須というわけではありません。
INI ファイルで定義するルートの例を次に示します。
この設定を使った (そして Zend Framework の MVC コンポーネントを使った)
場合、現在のページ番号を設定するコードはこのようになります。
setCurrentPageNumber($this->_getParam('page'));
]]>
それ以外にもオプションがあります。詳細は
設定
を参照ください。
最後に、paginator のインスタンスをビューに割り当てます。
Zend_View と ViewRenderer アクションヘルパーを使っている場合は、
次のようになります。
view->paginator = $paginator;
]]>
ビュースクリプトによるページのレンダリング
ビュースクリプトを使用してページ項目のレンダリング
(Zend_Paginator を使うよう設定している場合)
とページ処理コントロールの表示を行います。
Zend_Paginator は SPL の
IteratorAggregate
インターフェイスを実装しているので、
項目を順次処理したり表示したりするのは簡単です。
Example
paginator)): ?>
paginationControl($this->paginator,
'Sliding',
'my_pagination_control.phtml'); ?>