kohanaのテスト9・・・Zendフレームワークのページネーションを利用する
懸案だったページネーションについては、ZF(Zend FrameWork)のページネーター Zend_Paginator を利用することにしました。ZF のリファレンスガイドを読むと、Zend_View や Zend_Db とセットで使うと良いように書いてあります。しかし、kohana を基盤にしているのに ZF のビューやモデルを使うのでは本末転倒になるので、ページネーターだけ利用させてもらうことにします。それでもかなり楽ができるように思います。
ページネーションのサンプルコード
・kohana への ZF の統合については4月27日の日記に書いています。
・モデルについては kohanaのテスト5 で作ったモデルを利用します。
・テスト5のモデルをループで回してやれば、長~いテーブルを簡単に作れます。
・コントローラ kohana/application/classes/controller/test9.php
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Controller_Test9 extends Controller { public function action_index() { $dat = Model::factory('test5'); $select = $dat->selectData(); $paginator = Zend_Paginator::factory($select); if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = 1; } $paginator->setCurrentPageNumber($page); $pagecount = $paginator->count(); $hp = 'test9'; $firstpage = "$hp?page=1"; $beforepage = "$hp?page=" . ($page - 1); $nextpage = "$hp?page=" . ($page + 1); $lastpage = "$hp?page=" . $pagecount; if ($page == 1) $beforepage = "$hp?page=1"; if ($page == $pagecount) $nextpage = "$hp?page=" . $pagecount; // ビュー $message = "ページネーションの試験"; $view = View::factory('test9'); $view->message = $message; $view->data = $paginator; $view->firstpage = $firstpage; $view->beforepage = $beforepage; $view->nextpage = $nextpage; $view->lastpage = $lastpage; $this->response->body($view); } } ?>
・ビュー kohana/application/views/test9.php
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>kohanaのテスト</title> </head> <body> <h1><?php echo $message ?></h1> <table border="1"><tr> <?PHP foreach ($data as $d) { $id = HTML::chars($d['id']); $name = HTML::chars($d['name']); $address = HTML::chars($d['address']); $tel = HTML::chars($d['tel']); print "<tr><td>$id</td> <td>$name</td> <td>$address</td> <td>$tel</td></tr>"; } ?> </tr></table> <?php echo '<br />'; echo '<a href='.$firstpage.'><<</a>'; echo '<a href='.$beforepage.'> <</a>'; echo '<a> 前のページ 後のページ </a>'; echo '<a href='.$nextpage.'>> </a>'; echo '<a href='.$lastpage.'>>></a>'; ?> </body> </html>
ZF の助けを借りて結構簡単に出来ちゃいました。簡単タイプのページネーションですが、ZF のリファレンスガイドのコントロールなんかより余程簡単で分かりやすいと思います。