人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel のページャー(ページネーション)の表示とカスタマイズ

● Laravelのページャー(ページネーション / pagination)の表示

Bladeテンプレート内で次のように記述します

{!! $tweets->render() !!}

links() というエイリアスもあります。(機能は同じ)

{{ $model->links() }}

● 検索結果ページなどパラメーターを引き継ぐ

検索結果ページでは「検索文字列」「1ページあたりの表示数」などのパラメーターを引き継ぐ必要があります。
その時は次のように appends() メソッドを呼びます。

コントローラー pagination_params をコントローラーから渡します

$pagination_params = [
// パラメーターセット(連想配列)
];

return view('users.index', compact(pagination_params'));

bladeテンプレート内

    {!! $tweets->appends($pagination_params)->links('pagination.default') !!}

● その他便利なパラメーター(次のページがあるかどうか? など)

現在のページに表示されている件数: {{ $data->count() }}
現在のページ数: {{ $data->currentPage() }}
現在のページの最初の要素: {{ $data->firstItem() }}
次のページがあるかどうか: {{ $data->hasMorePages() }}
現在のページの最後の要素: {{ $data->lastItem() }}
最後のページ数: {{ $data->lastPage() }}
次のページのURL: {{ $data->nextPageUrl() }}
1ページに表示する件数: {{ $data->perPage() }}
前のページのURL: {{ $data->previousPageUrl() }}
合計件数: {{ $data->total() }}
指定ページのURL: {{ $data->url(4) }}

引用: http://bit.ly/2w8GKa8

● ページャー(ページネーション)のカスタマイズ

ページネーションをカスタマイズして「First Page」「Last Page」のリンクを追加してみましょう。

ページネーションの生成方法を次のように書き換えます

{!! $tweets->render() !!}
 ↓
{!! $tweets->links('pagination.default') !!}

resources/views/pagination/default.blade.php を以下の内容で新規作成します

@if ($paginator->lastPage() > 1)
<ul class="pagination">
    <li class="page-item {{ ($paginator->currentPage() == 1) ? ' disabled' : '' }}">
        <a class="page-link" href="{{ $paginator->url(1) }}">First Page</a>
     </li>
    <li class="page-item {{ ($paginator->currentPage() == 1) ? ' disabled' : '' }}">
        <a class="page-link" href="{{ $paginator->url(1) }}">
            <span aria-hidden="true">«</span>
            {{-- Previous --}}
        </a>
    </li>
    @for ($i = 1; $i <= $paginator->lastPage(); $i++)
        <li class="page-item {{ ($paginator->currentPage() == $i) ? ' active' : '' }}">
            <a class="page-link" href="{{ $paginator->url($i) }}">{{ $i }}</a>
        </li>
    @endfor
    <li class="page-item {{ ($paginator->currentPage() == $paginator->lastPage()) ? ' disabled' : '' }}">
        <a class="page-link" href="{{ $paginator->url($paginator->currentPage()+1) }}" >
            <span aria-hidden="true">»</span>
            {{-- Next --}}
        </a>
    </li>
    <li class="page-item {{ ($paginator->currentPage() == $paginator->lastPage()) ? ' disabled' : '' }}">
        <a class="page-link" href="{{ $paginator->url($paginator->lastPage()) }}">Last Page</a>
    </li>
</ul>
@endif

● カスタマイズした結果


         ↓

● 1ページしかない時にもページネーションを表示させる

Laravel の ページャーはデフォルトでは 1ページしかない時は表示されません
それではデザイン的にさみしい時は次のようにして表示させます。

{{-- paginate --}}
{!! $data_loop->links('pagination.front') !!}
{{-- / paginate --}}

  ↓ このように変更します

{{-- paginate --}}
@if ( $data_loop->hasPages() )
    {!! $data_loop->links('pagination.front') !!}
@else
    <div class="g_pager">
        <a class="prev"></a>
        <a class="current" href="">1</a>
        <a class="next"></a>
    </div>
@endif
{{-- / paginate --}}
添付ファイル1
添付ファイル2
No.1278
06/28 18:49

edit

添付ファイル