参考: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 で指定した数だけリンクが表示されることを確認できました。
コメント