laravelで自前で用意した配列をページャー処理する方法
ちなみに、こちらのページは
Laravel Framework version 5.2.39
で記載されておりますので、バージョンが異なると挙動が違うかもしれません。あしからず。
自前の配列をページャーする方法
本題の自前配列
以下の2つのクラスを使うやり方があり、
- Paginator
- LengthAwarePaginator ← 個人的にはこちらがオススメ
です。
なぜ、LengthAwarePaginatorがオススメかというと
Paginator を作ったときの(デフォルトの)ページがあまり好きじゃないからですw
Paginator を使った場合
PlayerContorler.php
$players = new Paginator($list, $disp_limit, $page, array('path'=>'/player'));
パラメータ | 内容 |
---|---|
$list | 自前の配列(array())※1 |
$disp_limit | 1ページに表示する数 |
$page | 現在のページ番号 |
array('path'=>'/player') | オプションをarrayで指定※2 |
※1)配列は全てでは無い。そのページで表示する分の配列。 | |
取り出しは「array_slice」等使って自分でなんとかしてください。 | |
count(list)>disp_limit だと disp_limit 分までしか出ません。 | |
(…ただなぜか disp_limit よりちょっと多めに list を入れておかないと「>>次」のページが出なかった・・・) | |
※2)最低限、前/次のページ行ったときのURL(path)だけ指定しておけばOK。 | |
他のオプションは自分で調べてください。 |
テンプレートは割愛(→気になる人は最下部に記載しております)
出来上がりページイメージ
↑ページボタンがなんか好きくない!!
そこで・・・
LengthAwarePaginator を使った場合★本命★
PlayerContorler.php
use Illuminate\Pagination\LengthAwarePaginator;
$players = new LengthAwarePaginator($list , $all_num, $disp_limit, $page, array('path'=>'/player'));
パラメータ | 内容 |
---|---|
$list | 自前の配列(array()) ※1 |
$all_num | 自前配列数(総数) |
$disp_limit | 1ページに表示する数 |
$page | 現在のページ番号 |
array('path'=>'/player') | オプションをarrayで指定※2 |
※1)配列は全てでは無い。そのページで表示する分の配列。 | |
取り出しは「array_slice」等使って自分でなんとかしてください。 | |
count(list)>disp_limit だと disp_limit 分までしか出ません。 | |
※2)最低限、前/次のページ行ったときのURL(path)だけ指定しておけばOK。 | |
他のオプションは自分で調べてください。 |
テンプレートは同じく割愛(→気になる人は最下部に記載しております)
出来上がりページイメージ
DBのページャーと同じようなページを作りたければ
「LengthAwarePaginator 」を使うのがオススメ!
ちなみに・・・
DB(Model)の配列をページャーする方法【蛇足】
こちらはLaravelの公式等にもあるDB(Model)のページャを作る場合です。
PlayerContorler.php
$player_model = new Player();
$players = $player_model->where('user_status', '1')->orderBy('user_id', 'desc')->paginate(20);
return view('player.index', compact('players'));
index.blade.php
@if($players->count())
<table class="table table-condensed table-striped">
<tr>
<th>ユーザID</th>
<th>ユーザ名</th>
<th>ステータス</th>
</tr>
@foreach($players as $player_item)
<tr>
<td>{{$player_item->user_id}}</td>
<td>{{$player_item->user_name}}</td>
<td>{{$player_item->user_status}}</td>
</tr>
@endforeach
</table>
{!! $players->appends([])->render() !!}
@endif