速習Larave3(その8)、ペジネーション
タグ: Laravel3
続いてペジネーションを見てみましょう。
- ソース:github
ペギネーションとも言いますね。でもパジネーションと書くのが発音からすると本当は正しんでしょう。皆さんの耳にはどう聞こえますか。
さて、いよいよあのごちゃごちゃしたペジネーションのコーディングを初めましょう。トップページのルートルートで呼び出される記事一覧ページをペジネーションにしましょう。なにせ、記事を作りまくりやすいシステムですから、皆さん十分にテストして数百位は記事ができていることでしょう。
- 参照:ペジネーション
では、コントローラーのpost.php
にある、get_index
メソッドを変更しましょう。
/** * 一覧表示 */ public function get_index() { $posts = Post::order_by('created_at', 'desc')->paginate(10); return view('post.index') ->with('posts', $posts->results) ->with('link', $posts->links()); }
なんてことでしょう。ごちゃごちゃになりません。ごちゃごちゃを期待していたネガティブ思考の方、すいません。
get()
の代わりにpaginate()
という、全くそのままのメソッドに変わっただけです。
ああ、それとその結果のresult
とlink()
をビューに渡していますね。
とても簡単です。
ビューも見ましょう。index.blade.php
を変更してください。
@layout('template') @section('title') 一覧表示 @endsection @section('content') <style> .pagination li { display: inline; margin: 0 5px; } </style> <table> <tr> <th>タイトル</th> <th>作成日</th> <th>更新</th> <th>削除</th> </tr> @foreach($posts as $post) <tr> <td>{{ HTML::link_to_route('post-show', $post->title ,array($post->id)) }}</td> <td>{{ $post->created_at }}</td> <td>{{ HTML::link_to_route('post-edit', '✜', array($post->id)) }}</td> <td>{{ HTML::link_to_route('post-delete', '✖', array($post->id)) }}</td> </tr> @endforeach </table> {{ $link }} @endsection
見たところ、最初の方にスタイル、最後にリンクが追加されています。
すいません。CSSには関わらないつもりだったんですが、ペジネーションに関わるとそうも言ってられないんです。LaravelのCSSはユーザーに自由に使用してもらうために、完全なCSSは用意してないんです。そこで、最低限だけ指定しました。
リンクにはページの表示状況に合わせて生成されたページリンクのコードが入っています。これはユーザー入力でありませんから、e()
で囲まないでくださいね。HTMLがそのまま出力される事態になります。
ご覧の通り、Laravelのペジネーションはシンプルです。その代わり、自由自在というわけには行きません。HTTP変数のGET限定です。特に指定しなくてもURIにクエリー文字列としてページコントロールの情報は自動的に付け加えられます。個人的にはフォームにペジネーションをつけるのは面倒なので、POSTメソッドをカバーしていないのは欠点に思えないのですが、どうしてもやりたい方はいらっしゃるでしょうね。
もうひとつ、生成されるリンクのHTMLを変更できないのです。ul
とli
で構成され、クラス名も固定です。CSSで変更することを前提にしています。なにせ、TwitterBootstrapが流行る前に出来たクラスですからね。ちなみにLaravel4ではBootstrapがデフォルトになるそうです。それより、生成の自由度が上がるほうが嬉しいのです。私はCSSフレームワークはBootstrapより、Foundationのほうがお気に入りですから。 :D