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);


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

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...