Pagerは、データの配列にページを付けるクラスです。 入力として受け取り、様々なパラメータによってページ付けを行います。 また、Pagerは、指定された範囲でリンクを生成し、 出力は完全にカスタマイズ可能です(たとえ、 mod_rewriteと併用していても動作します)。 Pager バージョン.1.xと Pager_SlidingのAPIには互換性があります。
この簡単な例は、アルファベット文字の配列を1ページあたり3文字ずつ ページ付けします。そして、前後2ページへのリンクを返します。
require_once 'Pager.php'; $params = array( 'mode' => 'Jumping', 'perPage' => 3, 'delta' => 2, 'itemData' => array('a','b','c','d','e',[...omissis...],'z') ); $pager = & Pager::factory($params); $data = $pager->getPageData(); $links = $pager->getLinks(); //$links is an ordered+associative array with 'back'/'pages'/'next'/'first'/'last'/'all' links. //NB: $links['all'] is the same as $pager->links; //echo links to other pages: echo $links['all']; //Pager can also generate <link rel="first|prev|next|last"> tags echo $pager->linkTags; //Show data for current page: echo 'PAGED DATA: ' ; print_r($data); //Results from methods: echo 'getCurrentPageID()...: '; var_dump($pager->getCurrentPageID()); echo 'getNextPageID()......: '; var_dump($pager->getNextPageID()); echo 'getPreviousPageID()..: '; var_dump($pager->getPreviousPageID()); echo 'numItems()...........: '; var_dump($pager->numItems()); echo 'numPages()...........: '; var_dump($pager->numPages()); echo 'isFirstPage()........: '; var_dump($pager->isFirstPage()); echo 'isLastPage().........: '; var_dump($pager->isLastPage()); echo 'isLastPageComplete().: '; var_dump($pager->isLastPageComplete()); echo '$pager->range........: '; var_dump($pager->range); |
この例は、mod_rewriteを併用した場合、このクラスをどの様に使用するかを 示しています。 以下のような.htaccessがあるとします。
--------- RewriteEngine on #Options FollowSymlinks RewriteBase / RewriteRule ^articles/([a-z]{1,12})/art([0-9]{1,4})\.html$ /article.php?num=$2&month=$1 [L] --------- |
require_once 'Pager.php'; $month = 'september'; $params = array( 'mode' => 'Sliding', 'append' => false, 'urlVar' => 'num', 'path' => 'http://myserver.com/articles/' . $month, 'fileName' => 'art%d.html', //Pager replaces "%d" with page number... 'itemData' => array('a','b','c',[...omissis...],'z'), 'perPage' => 3 ); $pager = & Pager::factory($params); $data = $pager->getPageData(); echo $pager->links; echo 'Data for current page: '; print_r($data); |
単一ページ内で一つ以上のページャを使用するには、 それぞれのページャに異なるurlVar を指定するだけです。
require_once 'Pager.php'; //first pager $params1 = array( 'perPage' => 3, 'urlVar' => 'pageID_articles', //1st identifier 'itemData' => $someArray ); $pager1 = & Pager::factory($params1); $data1 = $pager1->getPageData(); $links1 = $pager1->getLinks(); //second pager $params2 = array( 'perPage' => 8, 'urlVar' => 'pageID_news', //2nd identifier 'itemData' => $someOtherArray ); $pager2 = & Pager::factory($params2); $data2 = $pager2->getPageData(); $links2 = $pager2->getLinks(); |
もし DB 結果セットにページ番号を付けたい場合、 配列に全ての結果をフェッチし Pager に渡すことは、 最良のオプションではないかも知れません。Pager にてこ入れし、ラッパーを使用することで良いパフォーマンスを得ることが できます。パッケージの /docs/examples/ ディレクトリに、PEAR DB 抽象システムのサンプルラッパーがあります。 これはそのまま、もしくは必要に応じてカスタマイズして使用できます。
クエリ文字列にいくつかの変数を追加する必要がある場合、 extraVars パラメータを使用します。
$params = array( 'extraVars' => array( 'firstKey' => 'firstValue', 'secondKey' => 'secondValue', //... ), //... ); $pager1 = & Pager::factory($params); |
バージョン2.2.1から、PagerはPHP 5でも動作します。 しかし、コンストラクタ (非推奨) の代わりに factory()メソッドを使用する必要があります。
require_once 'Pager.php'; //wrong: //$pager =& new Pager($params); //right $pager =& Pager::factory($params); //continue as you did before |
もし、以前のバージョンを使用しており更新することができないのであれば、 PHP 5では以下のようなコードに書き換える必要があります。
//chose your preferred mode [Jumping | Sliding]: //require_once 'Pager/Jumping.php'; require_once 'Pager/Sliding.php'; //$pager =& new Pager_Jumping($params); $pager =& new Pager_Sliding($params); //continue as you did before |