ユーザ用ツール

サイト用ツール


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

差分

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

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

次のリビジョン
前のリビジョン
プログラム言語:php:laravel:ページャ [2020/01/14 15:27]
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>
-===== ページ番号を指定して表示 ===== +===== ページャの表示 ===== 
-10件ずつ表示した場合、5ページ目を取得した場合は、以下のようにすることで可能になる+blade の html ファイル内に以下を記述
 <code> <code>
-// 4番目の引数で、ページ数を指定できる +{{ $users->links() }}
-$result = DB::table('users')->paginate(10, ['*'], 'page', 5);+
 </code> </code>
-参考:https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Builder.html#method_paginate+===== ビューのカスタマイズ ===== 
 +ページャ呼び出し時に、ビューのファイル名を指定する。 
 +<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