====== Laravel のページネーション ======
参考:https://readouble.com/laravel/7.x/ja/pagination.html
ユーザ情報を10件ずつ表示するページャを実装したい場合、以下のような記述をすれば可能。
$result = DB::table('users')->paginate(10);
===== ページャの表示 =====
blade の html ファイル内に以下を記述。
{{ $users->links() }}
===== ビューのカスタマイズ =====
ページャ呼び出し時に、ビューのファイル名を指定する。
{{ $users->links('view.name') }}
===== ページャに表示するリンクの調整 =====
Laravel 7 のマニュアルによれば以下の記載で、両サイドに表示するリンクの数を調整できるらしいが、私の環境では動作せず。
{{ $users->onEachSide(2)->links() }}
仕方ないので、ビューファイル内で自分で調整を。\\
html ファイルの呼び出し時に、side パラメータで両サイドに表示するリンク数を渡す。
{{ $arts->links('layouts/pager', ['side' => 2]) }}
layouts/pager.blade.php ファイル内の記述
@if ($paginator->hasPages())
@if (!$paginator->onFirstPage())
@endif
@if ($paginator->currentPage() - $side > 2)
- …
@endif
@foreach ($elements as $element)
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
- {{ $page }}
@else
currentPage()
&& !($page === 1 && $paginator->currentPage() - $side === 2)
) {
continue;
} elseif ($page - $side > $paginator->currentPage()
&& !(
$page === $paginator->lastPage()
&& $paginator->currentPage() + $side === $paginator->lastPage() - 1
)
) {
continue;
}
?>
- {{ $page }}
@endif
@endforeach
@endif
@endforeach
@if ($paginator->currentPage() + $side < $paginator->lastPage() - 1)
- …
@endif
@if ($paginator->hasMorePages())
@endif
@endif
これで現在のページの左右に side で指定した数だけリンクが表示されることを確認できました。