CodeIgniter徹底入門とユーザガイドを読みながら試行錯誤しているが、Paginationではまっていた。
Paginationクラスで自動的に複数のページへのリンクが作られるのはよいのだが、元々のページからどうやって次のページへとデータを渡せばよいのかがわからなかった。
実は同じように苦労している人は多いようだ。
- Marius Boitor’s devessence » CodeIgniter search and pagination, terms and uri segments
- Marius Boitor’s devessence » CodeIgniter search and pagination, terms and uri segments (session)
- CodeIgniter(に限らず):検索結果とページングの嫌な関係: CodeIgniterで発火する?
まずはCodeIgniterのPaginationクラスの使い方を簡単にまとめてみる。
$this->load->library('pagination');
$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = '200';
$config['per_page'] = '20';
$this->pagination->initialize($config);
echo $this->pagination->create_links();
のような設定でPaginationクラスを使うと、2ページ目、3ページ目は
http://example.com/index.php/test/page/20 http://example.com/index.php/test/page/40
のようにして呼ばれるはず。
この20や40の位置は、
$config['uri_segment'] = 3;
のようにして指定できる。上記の例の場合はuri_segmentの値は3だ。
ユーザガイドを読むと、上記の20や40はページ番号のように書かれているが、実際はオフセット値が渡ってくる。自分はこれではまっていた。
それと、’uri_segment’ はうまく動作していないように見える。謎だ。
上記のように、Paginationにより自動生成されたリンクをクリックして呼び出されるページにはデフォルトではオフセット値しか渡すことができない。
このため、もっといろいろデータを渡したい場合には、CodeIgniter(に限らず):検索結果とページングの嫌な関係: CodeIgniterで発火する?
にあるようにセッションを使わないといけないと思われる。
このあたり、常識なのかも知れないが自分のような初心者にはわかりづらい。CodeIgniter本にはひとこと書いておいて欲しかった。
CodeIgniterのセッションクラスの使い方まとめ – devel-log.tar.gz
| CodeIgniter徹底入門 | |
![]() |
河合 勝彦 鈴木 憲治 安藤 建一
翔泳社 2008-06-10 |

CodeIgniter 2.0以降は普通にクエリ文字列でキーワードを渡すのがいいように思います。
と思いましたが、標準のページネーションクラスでは無理ですね…
標準のページネーションクラスで
http://d.hatena.ne.jp/Kenji_s/20110420/1303312489
でききました。
@Kenji
おお、base_url に入れて渡せるのですね。
サンプルコードのおかげでわかりやすいです。
ありがとうございました!