CodeIgniter3で、GETパラメタによるページネーション

CodeIgniter3で、GETパラメタによるページネーション

paginateの出力(デフォルト設定1/2ページ)

ドキュメントは以下。
http://www.codeigniter.com/userguide3/libraries/pagination.html

でも、結局はCodeIgniterのソース(system/librarys/pagination.php)を読みました。
最初からソースを読んだほうが早かったと思われます。
今回はCodeIgniterが持つレイヤの薄さに助けられました。

要求としては、ごくありきたりなGETを使ったページ指定により、
" http://{PAGE_URL}?page=2 "
のようなURLでページネートを実現することです。

基本の方法

最終的に以下のように設定しました。

application/controllers/任意のコントローラ.php
$count_image_files = $this->Image_file_model->get_count_image_files();

$per_page = 10;
$config = array();
$config['base_url'] = current_url();
$config['total_rows'] = $count_image_files;
$config['per_page'] = $per_page;
$config['use_page_numbers'] = true;
$config['page_query_string'] = true;
$config['query_string_segment'] = "page";
$config['full_tag_open'] = '<span class="pagination">';
$config['full_tag_close'] = '</span>';
$this->pagination->initialize($config);

$params = array();
$params['page'] = $this->input->get('page');
$params['par_page'] = $per_page;
$image_files = $this->Image_file_model->get_image_files($params);

・base_urlはCodeIgniterに取得させます。
・total_rowsが全コンテンツ数で、par_pageが1ページごとのコンテンツ数です。
・use_page_numbersとpage_query_stringが、GETでページネーションする際のキモのようです。
・query_string_segmentにてGETキー文字列を変更します。
  なお、デフォルトのキーはなぜか'per_page'だったりします。
・full_tag_* はドキュメント参照。あまり関係ありません。
・ ページ番号はpagination自身が自分の設定から判断してGETなどから取得するようです。

モデル Image_file_model のメソッドは、それぞれ総数(int)と詳細(array配列)を返すものです。このあたりは解説しなくてもpagination機能との関連を読めば想像がつくと思います。

デフォルト設定ファイルの使用

CodeIgniterアプリケーション(Webサイト)内で共通で使うpagination設定を、設定ファイルに切り出すことができます。
以下のコードの動作を確認しました。

application/config/pagination.php
$per_page = 10;
$config = array();
// $config['base_url'] = current_url();
// $config['total_rows'] = $count_image_files;
$config['per_page'] = $per_page;
$config['use_page_numbers'] = true;
$config['page_query_string'] = true;
$config['query_string_segment'] = "page";
$config['full_tag_open'] = '<span class="pagination">';
$config['full_tag_close'] = '</span>';


デフォルト値を設定したことにより、上で書いたコントローラのコードは、以下のようになりました。
application/controllers/任意のコントローラ.php
$config = array();
$config['base_url'] = current_url();
$config['total_rows'] = $count_image_files;
$this->pagination->initialize($config);

$params = array();
$params['page'] = $this->input->get('page');
$params['page'] = (empty($params['page']) ? 1 : $params['page']);
$params['par_page'] = $this->pagination->per_page;
$image_files = $this->Image_file_model->get_image_files($params);


以上、参考になれば幸いです。

このブログの人気の投稿

GIMP2.8でイラストにペン入れを行う

squid3プロキシサーバの設定(Ubuntu13.10)

ubuntu13.04で無線LANが繋がらない場合の対処