ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:ページャ

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
プログラム言語:php:laravel:ページャ [2021/01/22 16:38]
humolife
プログラム言語:php:laravel:ページャ [2021/01/22 17:06]
humolife
行 1: 行 1:
 ====== Laravel のページネーション ====== ====== Laravel のページネーション ======
 +参考:https://readouble.com/laravel/7.x/ja/pagination.html
 +
 ユーザ情報を10件ずつ表示するページャを実装したい場合、以下のような記述をすれば可能。 ユーザ情報を10件ずつ表示するページャを実装したい場合、以下のような記述をすれば可能。
 <code> <code>
 $result = DB::table('users')->paginate(10); $result = DB::table('users')->paginate(10);
 </code> </code>
 +===== ページャの表示 =====
 +blade の html ファイル内に以下を記述。
 +<code>
 +{{ $users->links() }}
 +</code>
 +===== ビューのカスタマイズ =====
 +ページャ呼び出し時に、ビューのファイル名を指定する。
 +<code>
 +{{ $users->links('view.name') }}
 +</code>
 +===== ページャに表示するリンクの調整 =====
 +Laravel 7 のマニュアルによれば以下の記載で、両サイドに表示するリンクの数を調整できるらしいが、私の環境では動作せず。
 +<code>
 +{{ $users->onEachSide(2)->links() }}
 +</code>
 +仕方ないので、ビューファイル内で自分で調整を。\\
 +html ファイルの呼び出し時に、side パラメータで両サイドに表示するリンク数を渡す。
 +<code>
 +{{ $arts->links('layouts/pager', ['side' => 2]) }}
 +</code>
 +layouts/pager.blade.php ファイル内の記述
 +<code>
 +@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
 +</code>
 +これで現在のページの左右に side で指定した数だけリンクが表示されることを確認できました。
プログラム言語/php/laravel/ページャ.txt · 最終更新: 2021/01/22 17:06 by humolife