forge($name = 'default', $config = array())
forge メソッドは、新しい pagination インスタンスを作成し、配列を渡すことで設定ができます。
静的 | はい | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
|||||||||
返り値 | Pagination | |||||||||
例 |
|
pagination クラスは、表示したいレコードのページネーションを簡単に設定することができます。
Pagination クラスの分かりやすい使用方法の例。コントローラのアクションメソッドへ書くことができます。
$config = array(
'pagination_url' => 'http://localhost/fuel/welcome/index/',
'total_items' => 10,
'per_page' => 5,
'uri_segment' => 3,
// もしくは、クエリ文字列によるページネーションがよいのであれば
//'uri_segment' => 'page',
);
// 'mypagination' という名前の pagination インスタンスを作る
$pagination = Pagination::forge('mypagination', $config);
$data['example_data'] = DB::select('id', 'value')
->from('pagination')
->limit($pagination->per_page)
->offset($pagination->offset)
->execute()
->as_array();
// オブジェクトを渡し、ビューの中に echo で出力される時に表示される
$data['pagination'] = $pagination;
// ビューを返す
return \View::forge('welcome/index', $data);
$config = array(
'pagination_url' => 'http://localhost/fuel/posts/index/',
'total_items' => Model_Post::count(),
'per_page' => 10,
'uri_segment' => 3,
// もしくは、クエリ文字列によるページネーションがよいのであれば
//'uri_segment' => 'page',
);
$pagination = Pagination::forge('mypagination', $config);
$data['example_data'] = Model_Post::query()
->rows_offset($pagination->offset)
->rows_limit($pagination->per_page)
->get();
// オブジェクトを渡し、ビューの中に echo で出力される時に表示される
$data['pagination'] = $pagination;
// ビューを返す
return \View::forge('posts/index', $data);
pagination インスタンスは、いくつかの方法で設定することができます。 インスタンスを forge するときに設定を配列で渡すこともできますし、インスタンスのプロパティを直接更新することもできます。
次の設定項目を定義することができます。
パラメータ | 型 | デフォルト | 説明 |
---|---|---|---|
pagination_url | string |
|
ページネーションがあるページの URL 。null の場合、現在の URL から自動で検出します。 |
uri_segment | integer|string |
|
(整数のとき) URI セグメントがページ番号を持っています。(文字列のとき) クエリ文字列のフィールドがページ番号を持っています。 |
num_links | integer |
|
表示するリンクの総数。 |
total_items | integer |
|
アイテムの総数。通常は、 count() クエリの結果です。 |
per_page | integer |
|
1 ページあたりのアイテム数。 |
current_page | integer |
|
URI 中にページ番号が示されていなかった場合に読み込むページ。指定されなかったときのデフォルトは 1 。 |
show_first | bool |
|
true かつ最初のページではない場合に '最初のページヘ' のリンクを生成します。 |
show_last | bool |
|
true かつ最後のページではない場合に '最後のページヘ' のリンクを生成します。 |
link_offset | int / float |
|
ページネーションブロックの中でアクティブなリンクのオフセット量、小数で 0 から 1 までの間または整数 (パーセンテージ) で 0 から 100 までの間のどちらか。 |
デフォルトで、 Pagination クラスはページネーションブロックの中央に ("現在のページ" の) アクティブなリンクを配置します。
設定にある link_offset の値を使うことで、この振舞いをコントロールすることができます。
この値は、float の 0 から 1 までの間か integer の 0 から 100 までの間 (パーセンテージのように) のどちらかで定義することができます。この値はデフォルトで 0.5
(= 50%) にセットされています。
この値を小さくした場合、アクティブなリンクは左へ移動し、
大きくした場合、アクティブなリンクは右へ移動します。
ここで、表示できるページが全部で 20 ページあると仮定してみましょう。 num_links は 5 にセットされていて、表示されるリンクは全部で 5 ページとなります、 同様に "前" と "次" のリンクも表示されています。現在選択しているページは 6 ページ目となります。
と表示されます、 選択しているページの 6 がブロックの中央部分にうまくキープされています。«
4
5
67
8
»
と表示されます、選択しているページの 6 がブロックの最初のリンクになっています。«
67
8
9
10
»
と表示されます。«
2
3
4
5
6»
アクティブの焦点を左や右へ徐々に移動させるために、範囲の中で任意の値を取ることができます。 当然ですが、表示したいリンクがあればあるほど、焦点の移動をするための粒度は細かくなっていきます。
これは十分なページがある場合に限って動作します。もしも、たったの 5 ページしかなくて、 5 つのリンクを表示したい、そして 3 ページ目が "現在のページ" の場合、 "前" と "次" のリンクは表示されませんし、 link_offset がどんな設定であっても "現在のページ" は中央となります。 これは単純に "現在のページ" のリンクを左や右へ移動できるほどの十分なページがないからです。
全ての pagination インスタンスは、ページネーションのマークアップを作成するために HTML を生成するテンプレートを用います。 config/pagination.php ファイルに標準のテンプレートとして保存することができます。 変更を加える前に、コア設定フォルダからアプリケーション設定フォルダにファイルをコピーしてください。 デフォルトの設定ファイルとして、FuelPHP のデフォルトと Twitter Bootstrap v2 に適合するテンプレートの 3 つのテンプレートが付属しています。
次のテンプレートのエントリを定義する必要があります。
wrapper | string |
|
生成されたページネーションのマークアップを囲むマークアップ。 |
---|---|---|---|
first | string |
|
"最初のページ" のマークアップを生成するために使われるマークアップ。 |
first-inactive | string | なし | このページが最初かシングルのとき、"最初のページ" のマークアップを生成するために使われるマークアップ。 |
first-inactive-link | string | なし | このページが最初かシングルのとき、"最初のページ" のリンクを生成するために使われるマークアップ。 |
first-marker | string |
|
"最初のページ" のマーカーを生成するために使われるマークアップ。 |
first-link | string |
|
"最初のページ" のリンクを生成するために使われるマークアップ。 |
previous | string |
|
"前のページ" のマークアップを生成するために使われるマークアップ。 |
previous-marker | string |
|
"前のページ" のマーカーを生成するために使われるマークアップ。 |
previous-link | string |
|
"前のページ" のリンクを生成するために使われるマークアップ。 |
previous-inactive | string |
|
非アクティブなリンクとして "前のページ" のマークアップを生成するために使われるマークアップ。 |
previous-inactive-link | string |
|
非アクティブなリンクとして "前のページ" のリンクを生成するために使われるマークアップ。 |
regular | string |
|
"その他ページ" のマークアップを生成するために使われるマークアップ。 |
regular-link | string |
|
"その他ページ" のリンクのマークアップを生成するために使われるマークアップ。 |
active | string |
|
"現在のページ" のマークアップを生成するために使われるマークアップ。 |
active-link | string |
|
"現在のページ" のリンクのマークアップを生成するために使われるマークアップ。 |
next | string |
|
"次のページ" のマークアップを生成するために使われるマークアップ。 |
next-marker | string |
|
"次のページ" のマーカーを生成するために使われるマークアップ。 |
next-link | string |
|
"次のページ" のリンクを生成するために使われるマークアップ。 |
next-inactive | string |
|
非アクティブなリンクとして "次のページ" のマークアップを生成するために使われるマークアップ。 |
next-inactive-link | string |
|
非アクティブなリンクとして "次のページ" のリンクを生成するために使われるマークアップ。 |
last | string |
|
"最後のページ" のマークアップを生成するために使われるマークアップ。 |
last-marker | string |
|
"最後のページ" のマーカーを生成するために使われるマークアップ。 |
last-link | string |
|
"最後のページ" のリンクを生成するために使われるマークアップ。 |
last-inactive | string | なし | このページが最後かシングルのとき、"最後のページ" のマークアップを生成するために使われるマークアップ。 |
last-inactive-link | string | なし | このページが最後かシングルのとき、"最後のページ" のリンクを生成するために使われるマークアップ。 |
テンプレートの中で、{uri} は生成されたページネーションのリンク (非アクティブなときは #) に置き換えられます。 同様に、{page} はページ番号もしくは "前" や "次" のマーカーに置き換わります。 マーカーに画像を使用したいときは、 テンプレートの中にある該当するリンクの定義を {page} から画像のマークアップへ置き換えるだけで修正できます。
pagination インスタンスを forge するときに渡す設定は、設定ファイルで定義されているデフォルトのテンプレートとマージされます。 これは、あなたが上書きしたい値だけを渡せばよいということです。 設定ファイルのテンプレートが完全ではない場合、 上記に記載したデフォルト値が使われます。
forge メソッドは、新しい pagination インスタンスを作成し、配列を渡すことで設定ができます。
静的 | はい | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
|||||||||
返り値 | Pagination | |||||||||
例 |
|
instance メソッドは、予め forge されたインスタンスを取得することができます。名前が指定されなかった場合は、default インスタンスを返します。
静的 | はい | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | mixed 。Pagination オブジェクト、または要求したインスタンスが存在しない場合は false 。 | ||||||
例 |
|
render メソッドは、ビューの中で表示するページネーションのリンクのマークアップを生成します。
静的 | いいえ | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | string | ||||||
例 |
|
Pagination オブジェクトは、オブジェクトを echo で出力する時に render() メソッドを呼ぶ、 または文字列にキャストする __toString() メソッドを持っています。
first メソッドは、ページネーションで "最初のページ" のリンクを表示するマークアップを生成します。 マーカーとして使用する文字列が与えられなかった場合、テンプレートから "first-marker" の値が使われます。
静的 | いいえ | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | string | ||||||
例 |
|
"最初のページ" のリンクは、最初のページが存在し、(このページが) 最初のページではない場合のみ表示されます。 デフォルトでは、'最初' の非アクティブなリンクは提供されません。
previous メソッドは、ページネーションで "前のページ" のリンクを表示するマークアップを生成します。 マーカーとして使用する文字列が与えられなかった場合、テンプレートから "previous-marker" の値が使われます。
静的 | いいえ | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | string | ||||||
例 |
|
next メソッドは、ページネーションで "次のページ" のリンクを表示するマークアップを生成します。 マーカーとして使用する文字列が与えられなかった場合、テンプレートから "next-marker" の値が使われます。
静的 | いいえ | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | string | ||||||
例 |
|
last メソッドは、ページネーションで "最後のページ" のリンクを表示するマークアップを生成します。 マーカーとして使用する文字列が与えられなかった場合、テンプレートから "last-marker" の値が使われます。
静的 | いいえ | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | string | ||||||
例 |
|
"最後のページ" のリンクは、最後のページが存在し、(このページが) 最後のページではない場合のみ表示されます。 デフォルトでは、 '最後' の非アクティブなリンクは提供されません。
pages_render メソッドは、ページネーションで "前" と "次" のリンクの間にある "ページ" のリンクを表示するマークアップを生成します。
静的 | いいえ |
---|---|
パラメータ | なし |
返り値 | mixed |
例 |
|
便宜のため、 Pagination クラスは default インスタンスのみを扱う静的インターフェースを持っています。
get メソッドは、default インスタンスの構成アイテムを取得できます。
静的 | はい | ||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
返り値 | mixed 。プロパティ値、またはプロパティが存在しない場合は null 。 | ||||||
例 |
|
set メソッドは、default インスタンスの構成アイテムを指定した値で設定できます。
静的 | はい | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
|||||||||
返り値 | void | |||||||||
例 |
|
下位互換性のため、set_config()、create_links()、next_link() や prev_link() の静的メソッドは、 既存の FuelPHP v1.4 以降のアプリケーションをアップグレードするときの移行にかかる影響を最小限に抑えるために、 default インスタンスとしてエミュレートされます。
今のところ、静的クラスのプロパティへの直接アクセスをエミュレートする方法がないことに注意してください。 アプリケーションでそのようなことを行いたいときは、それらを変更する必要があります。
// v1.4 より前の使用法:
Pagination::$per_page = 10;
// 新しい使用法:
Pagination::set('per_page', 10);
// v1.4 より前の使用法:
Model_Article::find()
->order_by('date', 'ASC')
->rows_offset(\Pagination::$offset)
->rows_limit(\Pagination::$per_page)
->get();
// 新しい使用法:
Model_Article::query()
->order_by('date', 'ASC')
->rows_offset(\Pagination::get('offset'))
->rows_limit(\Pagination::get('per_page'))
->get();