参考: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()) <ul> @if (!$paginator->onFirstPage()) <li class="prev"><a href="{{ $paginator->previousPageUrl() }}"></a></li> @endif @if ($paginator->currentPage() - $side > 2) <li class="more"><a>…</a></li> @endif @foreach ($elements as $element) @if (is_array($element)) @foreach ($element as $page => $url) @if ($page == $paginator->currentPage()) <li class="active"><a>{{ $page }}</a></li> @else <?php if ($page + $side < $paginator->currentPage() && !($page === 1 && $paginator->currentPage() - $side === 2) ) { continue; } elseif ($page - $side > $paginator->currentPage() && !( $page === $paginator->lastPage() && $paginator->currentPage() + $side === $paginator->lastPage() - 1 ) ) { continue; } ?> <li><a href="{{ $url }}">{{ $page }}</a></li> @endif @endforeach @endif @endforeach @if ($paginator->currentPage() + $side < $paginator->lastPage() - 1) <li class="more"><a>…</a></li> @endif @if ($paginator->hasMorePages()) <li class="next"><a href="{{ $paginator->nextPageUrl() }}"></a></li> @endif </ul> @endif
これで現在のページの左右に side で指定した数だけリンクが表示されることを確認できました。
コメント