いつのまにかZF2が出てたので、今さら手元に残ってたZF1の未公開記事を大放出しちゃうシリーズ。
ページャーはPear::Pagerが優秀すぎてとりあえずそれ使っとけば安泰ではあるのですが、ZFにもZend_Paginatorが存在します。
特徴はZend_Db_Selectあたりと連携すると、全件数全ページ数などの取得も自動的に行ってくれることです。
公式の使用例は何故かルータやZend_Viewなどの使用が前提になっていて面倒なので、とりあえずZend_Paginatorのみ使う方向で作ってみます。
素材は昔作ったページャー。
配列ならいったんZend_Paginator_Adapter_Arrayに突っ込んでからZend_Paginatorを呼び出すという形になります。
他のアダプタとしては、Zend_Db_Selectインスタンスをそのまま渡すだけでcountとかlimitとかを自動的に発行してページャーやデータを取得したりしてくれるすごいアダプタZend_Paginator_Adapter_DbSelect、単にページャーだけが必要でデータそのものは不要なときに使うZend_Paginator_Adapter_Nullなどがあります。
アダプタの指定がよくわからないという場合は、コンストラクタのかわりにZend_Paginator::factory()メソッドを使うと、概ねよきにはからってくれます。
なお、こちらはPear::Pagerと違って、HTMLのリンクを作成したりしてくれる機能はありません。
そこらへんは自力で実装することになります。
Zend_Viewを使用している場合は、Zend_View_Helper_PaginationControlというヘルパーでできるようになるみたいです。
まあ、機能の単位という点では確かにこちらの実装の方が正しいのかもしれませんが、やはり具体的なリンクまで簡単に作ってくれるPear::Pagerのほうが便利ですね。
ページャーはPear::Pagerが優秀すぎてとりあえずそれ使っとけば安泰ではあるのですが、ZFにもZend_Paginatorが存在します。
特徴はZend_Db_Selectあたりと連携すると、全件数全ページ数などの取得も自動的に行ってくれることです。
公式の使用例は何故かルータやZend_Viewなどの使用が前提になっていて面倒なので、とりあえずZend_Paginatorのみ使う方向で作ってみます。
素材は昔作ったページャー。
<?php
require_once('Zend/Paginator.php');
require_once('Zend/Paginator/Adapter/Array.php');
//適当な配列
$arr=array();
for($i=1;$i<1000;$i++){
$arr[]=array(
'id'=>$i
,'md5'=>md5($i)
);
}
//ページャー
$zendPaginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($arr));
//設定
//現在のページ数
$zendPaginator->setCurrentPageNumber(5);
//1ページに表示する件数
$zendPaginator->setItemCountPerPage(20);
//前後合わせて表示するページ数
$zendPaginator->setPageRange(7);
//ページング情報を取得
$pager = $zendPaginator->getPages();
print('全ページ数:' . $pager->pageCount);
print('次のページ:' . $pager->next);
//アイテムを取得
//現在のページのアイテムを取得
$zendPaginator->getCurrentItems();
//指定したページのアイテムを取得
$zendPaginator->getItemsByPage(15);
//JSON形式で取得
$zendPaginator->toJson();
//foreachすると、現在のページのアイテムだけをforeachする
foreach($zendPaginator as $key=>$val){
print($val['id'] . ' : ' . $val['md5']);
}
Zend_Paginatorのインスタンスには配列を渡すことはできず、アダプタのインスタンスを渡さなければなりません。配列ならいったんZend_Paginator_Adapter_Arrayに突っ込んでからZend_Paginatorを呼び出すという形になります。
他のアダプタとしては、Zend_Db_Selectインスタンスをそのまま渡すだけでcountとかlimitとかを自動的に発行してページャーやデータを取得したりしてくれるすごいアダプタZend_Paginator_Adapter_DbSelect、単にページャーだけが必要でデータそのものは不要なときに使うZend_Paginator_Adapter_Nullなどがあります。
アダプタの指定がよくわからないという場合は、コンストラクタのかわりにZend_Paginator::factory()メソッドを使うと、概ねよきにはからってくれます。
なお、こちらはPear::Pagerと違って、HTMLのリンクを作成したりしてくれる機能はありません。
そこらへんは自力で実装することになります。
Zend_Viewを使用している場合は、Zend_View_Helper_PaginationControlというヘルパーでできるようになるみたいです。
まあ、機能の単位という点では確かにこちらの実装の方が正しいのかもしれませんが、やはり具体的なリンクまで簡単に作ってくれるPear::Pagerのほうが便利ですね。
PR