about paging of codeaigniter

22
CodeIgniterページネーションについて @simultechnology

Upload: takatsugu-ishikawa

Post on 12-Jul-2015

813 views

Category:

Education


1 download

TRANSCRIPT

Page 1: about paging of CodeaIgniter

CodeIgniterのページネーションについて

@simultechnology

Page 2: about paging of CodeaIgniter

/shop_ci/system/libraries/Pagination.php

ページネーションクラスの場所

Page 3: about paging of CodeaIgniter

CI_Pagination

ページネーションクラスのクラス名

実際のソース:class CI_Pagination {

var $base_url = ''; // The page we are linking tovar $total_rows = ''; // Total number of items (database results). . .

Page 4: about paging of CodeaIgniter

ページネーションクラスの公開メソッド

メソッドは2つだけなので、非常に。

●initialize($params = array())初期化用。引数に設定条件の配列。

●create_links()リンクの文字列を生成し、返します。

Page 5: about paging of CodeaIgniter

ページネーションクラスの使い方①

コントローラ内でロードします。

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

Page 6: about paging of CodeaIgniter

ページネーションクラスの使い方②

ロードした後、設定値を設定します。以下の3項目は必須。

$config['base_url'] = 'http://example.com/index.php/test/page/';// ベースなるURL$config['total_rows'] = '200'; // 総件数$config['per_page'] = '20'; // 1ページあたりの件数

Page 7: about paging of CodeaIgniter

ページネーションクラスの使い方③

以下の項目も設定した方がいいかも。

デフォルトは「2」$config['num_links'] = 2;

個人的に「5」くらいがいいかも。「5」だとこんな感じです。

< 1 2 3 4 5 6 7 8 9 10 11 > Last ›現在ページから左右に5個リンクができます。

Page 8: about paging of CodeaIgniter

ページネーションクラスの使い方④

設定後、initializeメソッドを呼び出します。

$this->pagination->initialize($config);

Page 9: about paging of CodeaIgniter

ページネーションクラスの使い方⑤

最後に、initializeメソッドを呼び出します。

$link = $this->pagination->create_links();

戻り値の$linkはページネーションの文字列なので、これを画面に渡せば、OK!

Page 10: about paging of CodeaIgniter

VIEWでのページネーション①

画面ではこんな感じ。

base_urlがhogeコントローラのsearchメソッドだとすると…

「1」のリンク -> /CodeIgniter/hoge/search/「2」のリンク -> /CodeIgniter/hoge/search/20「3」のリンク -> /CodeIgniter/hoge/search/40「11」のリンク -> /CodeIgniter/hoge/search/200

Page 11: about paging of CodeaIgniter

VIEWでのページネーション②

つまり、、

Page 12: about paging of CodeaIgniter

VIEWでのページネーション③

リンクの数字が「1つ」増えると、コントローラで設定した1ページあたりの件数分だけ、増えている!!

「1」のリンク -> /CodeIgniter/hoge/search/「2」のリンク -> /CodeIgniter/hoge/search/20「3」のリンク -> /CodeIgniter/hoge/search/40「11」のリンク -> /CodeIgniter/hoge/search/200

Page 13: about paging of CodeaIgniter

VIEWでのページネーション④

URLの引数はコントローラで取得できます。

つまり、次の場合「2」のリンク -> /CodeIgniter/hoge/search/20

hogeコントローラのsearchメソッドではこんな感じ。public function search($param = 0){// $paramは20。(引数の数字がない場合は0が設定される)

Page 14: about paging of CodeaIgniter

ページネーションとDB①

ところで、、、

オフセットって知ってますか?

Page 15: about paging of CodeaIgniter

ページネーションとDB②

ぐぐったら、一番最初に以下が表示されました。

オフセットとは、あるデータの位置を、基準点からの差(距離)で表した値のこと。「offset」は英語で「差し引き計算する」という意味で、そこから転じて、必要なデータの位置を基準点からの差(距離)で表した値のことをオフセットと呼んでいる。

オフセットとは 【offset】 - 意味/解説/説明/定義 : IT用語辞典

Page 16: about paging of CodeaIgniter

ページネーションとDB③

何やら、小難しい説明だけど、、、

「必要なデータの位置の基準点からの差」

「0」が基準点で、「オフセット = 20」で「20」の差があるとすると、次は「21」番目、だよねっ??

Page 17: about paging of CodeaIgniter

ページネーションとDB④

20番目まで、次のページが21番目から40番目まで、次のページが41番目から60番目まで、次のページが61番目から80番目まで、次のページが101番目から120番目まで、、、

羊を100匹数えるみたいな気分になります(汗)

要するに、上のようなデータをとればいいんですね?

Page 18: about paging of CodeaIgniter

ページネーションとDB⑤

最初の20番目までのレコードを取得するにはSELECT * FROM tbl LIMIT 20;

21番目から40番目までのレコードを取得するには

SELECT * FROM tbl LIMIT 20,20;

これは以下のように読めます。オフセット番目から、20件分(->1ページあたりの件数)

Page 19: about paging of CodeaIgniter

ページネーションとDB⑥

CodeIgniterでのLIMIT句を使うとこんな感じです。

// LIMIT句の生成$this->db->limit($per_page, $offset);※$per_pageは1ページあたりの件数

// クエリ実行。$query = $this->db->get('t_shop_item');

Page 20: about paging of CodeaIgniter

ページネーションとDB⑦

ページネーションの総件数の設定はこうでした。$config['total_rows'] = 'XXX'; // 総件数

これはデータベースのcount分で取得します。

$count = $this->db->count_all_results('t_shop_item');

戻り値が表示総件数です。

Page 21: about paging of CodeaIgniter

まとめ

$this->db->limit($per_page, $offset);で、

$per_page(1ページあたりの件数)はコントローラで設定(画面から入力される場合もあるけど)$offsetは画面のページネーションのリンクからgetメソッドで渡される。ページネーションの総件数はcount文で取得。

ページネーションとDBはとっても密接な関係!!

Page 22: about paging of CodeaIgniter

まとめ②

以下が参考のリンクです。

CodeIgniter ユーザガイド 日本語版 Version 1.7.2

http://codeigniter.jp/user_guide_ja/libraries/pagination.html