FuelPHPのページネーションで2ページ以降もユーザ入力変数を使う

タイトルなんて言えばいいんだ・・・

ユーザから入力された値を元にDBから値を取得し、ページネーションでページ遷移する場合。
通常だと1ページ目しか、ユーザから入力された値が変数に格納されていないため、2ページ以降は「変数がありません」とエラーが出る。

そんな場合は GETを使って値を次のページへ渡していけばいい。

ページネーションについては過去にブログで書いたことがある(FuelPHP1.7のページネーション[FuelPHP入門])。
・・・が、今回のことで全然理解していなかったことが発覚。恥ずかしい。

1.GETを使う目的

今回の目的、やりたいこと。
ユーザ入力値を元にページネーションしたい。

1. ページネーションを作ってて、ユーザ入力値が最初のページにしか保存できてない。
→ ページごとじゃなく最初の1回だけDBへアクセスして、配列にでも格納して、ページごとに必要な値取得したらいいんでね?
→ 難しそう。

2. ページが変わっても、ユーザ入力値を保持したい。
→ 最初POSTを使うもうまくいかない。
→ GETは使えるらしい。

ということで、2を採用。
ページネーションで GETを使う。

GETを使うには、ページネーションでクエリ文字列を有効にしないといけない。

通常のページネーションの形はこう。

http://example.com/articles/page/2

クエリ文字列を使うとこうなる。

http://example.com/articles/?page=2

さらにGETを使うことこうなるイメージ。

http://example.com/articles/?search=hoge&page=2

クエリ文字列によるページネーションは、GETを使うための機能なのか。

2.GETを使うための設定

まず、クエリ文字列を使えるようにしよう。
公式ドキュメントを参考に。$configの部分を修正。

$config = array(
    'pagination_url' => 'http://localhost/fuel/welcome/index/',
    'total_items' => 10,
    'per_page' => 5,
    'uri_segment' => 3,
    // もしくは、クエリ文字列によるページネーションがよいのであれば
    'uri_segment' => 'page', //ここのコメントアウトをはずす。
 );

公式ドキュメントでは「’uri_segment’」の行がコメントアウトされていたが、このコメントアウトを削除。
これだけでクエリ文字列を使えるようになる。

Controllerには $_GETを受け取るInput()クラス、そのユーザ入力値を元にデータを取得するDBを書く。

$search = Input::get('search');

$data['example_data'] = DB::select('id', 'value')
    ->from('pagination')
    ->where('value', $search) //こんな感じ
    ->limit($pagination->per_page)
    ->offset($pagination->offset)
    ->execute()
    ->as_array();

limitに1ページで表示する数を指定、offsetに何番目からとってくるかを指定している。
この offsetがちょっと理解不足。

勉強する。

参考

Pagination – クラス – FuelPHP ドキュメント

FuelPHP のクエリ文字列でのページネーション – A Day in Serenity @ kenjis

ErogameScape -エロゲー批評空間- Blog : FuelPHP1.5のpaginationにQuery Stringによるページネーションが追加されています

FuelPHP GETのパラメーターとページネーション

コメント

  1. Margery より:

    Learning a ton from these neat arslicet.

タイトルとURLをコピーしました