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);
$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>';
$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);
$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);
以上、参考になれば幸いです。