CodeIgniterの勉強メモ (7) ページ繰り処理

原理

リンクURIに数字を埋め込み、アクションにURIでこの数を取得。
数字を飛ばされるデータとして使用し、SQLのLIMIT文を構成し、DBからデータを取得。
この数字以外のパラメータ(LIMITのデータ取得数含む)はアクションで設定する。

下記の画像の場合:4ページ目で、ページ毎20データとし、このページのリンクは:
ci/コントローラー/アクション/60
スクリーンショット 2014-09-12 1.32.17
従って最後(Last)のリンクは:(データ総数200とする)
ci/コントローラー/アクション/180

ライブラリ引用

paginationライブラリのインポートが必要です。

$this->load->library('pagination');

設定パラメータ

$config['base_url'] = site_url('welcome/pagetest');
//ページリンクの前の部分 localhost/ci/welcome/pagetest/
$config['total_rows'] = 200;      // 総データ数
$config['per_page'] = 20;         // ページ毎のデータ数

//ページリンクをローカライズ
$config['first_link'] = '最前';    //デフォルトはFirst
$config['last_link'] = '最後';     //デフォルトはLast
$config['next_link'] = '次へ';     //デフォルトは>
$config['prev_link'] = '戻る';     //デフォルトは<

ローカライズ文字設定後:
スクリーンショット 2014-09-12 1.34.03

ページリンク生成

$this->pagination->initialize($config);
//設定を代入、ライブラリを初期化
echo $this->pagination->create_links();
// create_links()がページリンクのHTMLを戻る
// view使用の場合、このHTMLデータをviewに書き出す

データ取得処理

DBからデータ取得するときに使う両パラメータ:
ページ毎データ数:自分で設定
飛ばされるデータ数:ページリンクから取得 $this->input->segment(3)

SQL文でデータ取得の場合:

$per_page = 20;
$offset = $this->input->segment(3);
//ページ毎20データの場合、4ページ目リンクはwelcome/pagetest/60、60が取得される
//60データが飛ばされる

$sql = "SELECT * FROM mytable LIMIT $offset , per_page";
//61データから20データを取得

ARでDBデータ取得の場合:

$this->db->limit($per_page, $offset);  //offsetとper_pageの順はSQL文と逆
$query = $this->db->get('mytable');

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>