忍者ブログ
自分なりの目線で情報を発信します。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Zend_Paginatorを使って、簡単なページング付き一覧を作ってみました。

Zend_Paginator(本家マニュアル)
http://framework.zend.com/manual/ja/zend.paginator.html
 
以下のテーブルからデータを取得して一覧を表示します。
 
■テーブル名
  • user
■カラム定義
  • id INT
  • name VARCHAR(16)
 
■UserController.php
  1. <?php
  2.  
  3. class UserController extends Zend_Controller_Action
  4. {
  5.     // ユーザー一覧表示
  6.     public function userListAction()
  7.     {
  8.         // ページ番号のリクエストがあれば取得(無ければ1ページ目とする)
  9.         $pagenum   = $this->getRequest()->getParam('page', 1);
  10.         // DBアダプタ生成
  11.         $dbAdapter = new Zend_Db_Adapter_Pdo_Mysql(array(
  12.                              'host'     => 'localhost',
  13.                              'username' => 'xxxx',
  14.                              'password' => 'xxxx',
  15.                              'dbname'   => 'xxxx'
  16.                           ));
  17.         // SQL作成
  18.         $select = $dbAdapter->select()
  19.                             ->from(array('usr' => 'user'),
  20.                                    array('id', 'name'))
  21.                             ->order(array('id'));
  22.         // ページネーターを取得
  23.         $adapter   = new Zend_Paginator_Adapter_DbSelect($select);
  24.         $paginator = new Zend_Paginator($adapter);
  25.         // 現在ページを設定
  26.         $paginator->setCurrentPageNumber($pagenum);
  27.         // 1ページあたりの表示件数を設定
  28.         $paginator->setItemCountPerPage(10);
  29.         // ビューにページネーターを渡す
  30.         $this->view->assign('userPaginator', $paginator);
  31.         // ビューを表示
  32.         $this->renderScript('admin/user_list.php');
  33.     }
  34. }
  35.  
  36. // end of file

リクエストを受け付けるアクションです。
テーブルからデータを取得するZend_Paginatorを、 ビューに渡しています。
Zend_Paginator用のアダプタには以下の種類があるそうですが、
普通にDBのテーブルから取得するために、DbSelectアダプタを使用しています。
 
<Zend_Paginator用のアダプタ>
アダプタ説明
Array PHP の配列を使用します。
DbSelect Zend_Db_Select のインスタンスを使用し、配列を返します。
DbTableSelect Zend_Db_Table_Select のインスタンスを使用し、 Zend_Db_Table_Rowset_Abstractのインスタンスを返します。 これは、結果セットについての追加情報 (カラム名など) を提供します。
Iterator Iterator のインスタンスを使用します。
Null データのページ処理を管理する際に Zend_Paginator を使用しません。その場合でもページ処理コントロールの機能を使うことはできます。


■user_list.php
  1. <html>
  2. <head>
  3.   <title>ユーザー一覧</title>
  4.   <meta http-equiv="Content-Type" content="text/html; charset=utf8">
  5. </head>
  6. <body>
  7.   <h1>ユーザー一覧</h1>
  8.   <table summary="ユーザー一覧">
  9.     <thead>
  10.       <tr>
  11.         <th>ID</th>
  12.         <th>名前</th>
  13.       </tr>
  14.     </thead>
  15.     <tfoot></tfoot>
  16.     <tbody>
  17.     <?php foreach($this->userPaginator as $key => $user): ?>
  18.       <tr>
  19.         <td>
  20.           <?php echo $user['id']; ?>
  21.         </td>
  22.         <td>
  23.           <?php echo $user['name']; ?>
  24.         </td>
  25.       </tr>
  26.     <?php endforeach; ?>
  27.     <?php if (count($this->userPaginator) === 0): ?>
  28.       <tr>
  29.         <td colspan="2">
  30.           データがありません
  31.         </td>
  32.       </tr>
  33.     <?php endif; ?>
  34.     </tbody>
  35.   </table>
  36.   <!-- ページネーションリンクを表示 -->
  37.   <?php echo $this->paginationControl(
  38.                  $this->userPaginator,
  39.                  'Sliding',
  40.                  'pagination/my_pagination_control.phtml'
  41.              );
  42.   ?>
  43. </body>
  44. </html>

一覧表示用のビュースクリプトです。
コントローラーから渡されたページネーターを使って、一覧を表示しています。
 
Zend_PaginatorはIteratorAggregateインターフェイスを実装しているため、
foreach文で順次処理をすることができています。
 
また、Countableインターフェイスも実装しているため、
count()で件数を取得することができます。
 
37~42行目に、ページネーションリンクを表示するための記述をしています。
引数は順番に、
 Zend_Paginatorのインスタンス
 スクロール形式
 ビュースクリプト
となっています。
第4引数も指定できるのですが、そのサンプルはまた後日に。
 
スクロール形式には、以下4種類があります。
 
<Zend_Paginatorのスクロール形式>
スクロール形式説明
All すべてのページを返します。 総ページ数が比較的少なめのときなど、 ドロップダウンメニュー形式でページ選択をさせる際に便利です。 そのような場合は、利用できるすべてのページを 一度にユーザに見せることになるでしょう。
Elastic Google 風のスクロール形式で、 ユーザがページを移動するのにあわせて拡大・縮小します。
Jumping ユーザがページを進めるにつれて、 ページ番号が表示範囲の最後に向けて進んでいきます。 表示範囲を超えると、新しい範囲の最初の位置に移動します。
Sliding Yahoo! 風のスクロール形式で、 現在表示されているページが常にページ範囲の中央 (あるいは可能な限りそれに近い場所) にあるようにします。これがデフォルトの形式です。

 
次は、ページネーションリンク用のビュースクリプトです。
PR
お知らせ
プロフィール
HN:
shusatoo
性別:
男性
自己紹介:
基本PHP。JavaScriptちょっとだけ。Javaをほんの少し。
おすすめ本
最新コメント
[10/09 shusatoo]
[10/09 misney]
最新トラックバック
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
ブログ内検索
カウンター
アク解アナライズ
バーコード
ビジター

Copyright © [ 開発メモるアル ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]