速習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