hampom TODAY

「TODAY」ってタイトルが付くブログが作りたいな、と思った10分後に作ったブログ。

Kohana データベースへの登録とページネーション 〜 ページネーション 〜

1件のコメント

データベース登録できたので、次はページネーションを。

同梱モジュールには含まれていない様子だったので、さっさとググッて見つけてきました。

kloopko / kohana-pagination [ https://github.com/kloopko/kohana-pagination ]

ページからダウンロードしてきて、展開したら modules/ 以下にコピーします。
次に bootstrap.php に追加。

/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
        // 'auth'       => MODPATH.'auth',       // Basic authentication
        // 'cache'      => MODPATH.'cache',      // Caching with multiple backends
        // 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
        'database'   => MODPATH.'database',   // Database access
        // 'image'      => MODPATH.'image',      // Image manipulation
        'orm'        => MODPATH.'orm',        // Object Relationship Mapping
        // 'unittest'   => MODPATH.'unittest',   // Unit testing
        // 'userguide'  => MODPATH.'userguide',  // User guide and API documentation
        'pagination' => MODPATH.'pagination',
        ));

pagination というディレクトリでコピーしたので MODPATH.’pagination’ となっています。

追記するのはコントローラーとビューの2つ。

コントローラーに追記

$_POST の if 文の前に追加します。

                $all_address = ORM::factory('address');
                $pagination = Pagination::factory(array(
                        'item_per_page' => 10,
                        'total_items'   => $all_address->count_all(),
                ));

                $addresses = $all_address->limit($pagination->items_per_page)
                                         ->offset($pagination->offset)
                                         ->find_all();

                $view = View::factory('address/create')
                        ->set('pagination', $pagination)
                        ->set('addresses', $addresses)
                        ->bind('errors', $errors);

特に絞り込むような条件もないので、全件の件数を 4行目で pagination に設定し、1ページ10件ずつ(item_per_page) に設定します。
10件ずつ区切って表示するため、 limit() および offset() にそれぞれ、 item_per_page と offset を指定し取得範囲を変動させます。

結果を、先ほどの view に set() でビューに渡せば完了です。

ビューに追記

<?php
  echo $pagination->render();
?>
<?php echo $pagination->total_items; ?>件登録があります
<table>
<? foreach ($addresses as $address): ?>
  <tr>
    <td><?php echo $address->firstname; ?></td>
    <td><?php echo $address->lastname; ?></td>
  </tr>
<?php endforeach; ?>
</table>

create.php に最後に上記を追記。
1行目の render() によって、ページ送りが表示されます。

また、このままではページ送りが First や Last、Next といった英語表記になっています。
しかし i18n による国際化の仕組みによって日本語にすることができます。

application/i18n/ に配下に ja.php ファイルを作成。
以下のように記述します。

<?php defined('SYSPATH') or die('No direct script access.');
return array(
    'First' => '最初へ',
    'Previous' => '前へ',
    'Next' => '次へ',
    'Last' => '最後へ',
);

これによって、日本語表示になります。

投稿者: hampom

2012年 1月 5日 at 6:07 PM

カテゴリー: 未分類

コメント / トラックバック1件

RSS でコメントを購読する

  1. [...] 前回の記事のままでは、ページ指定が query_string 設定となり ?page_id= となっていました。 これを route 設定に変更します。 [...]


コメントする

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s に接続中

フォロー

Get every new post delivered to your Inbox.

現在332人フォロワーがいます。