Laravel - ページネーションのカスタマイズ

こんにちは、将来の開発者たち!今日は、Laravelのページネーションカスタマイズの素晴らしい世界に飛び込みます。あなたの近所の親切なコンピュータサイエンスの先生として、この旅をガイドするのがとても楽しみです。プログラミングが初めての人も心配しないでください。基本から始めて、少しずつ進めていきます。コーヒー(またはあなたの好みの茶)を飲みながら、始めましょう!

Laravel - Pagination Customizations

ページネーションとは?

カスタマイズに入る前に、まずページネーションとは何かを理解しましょう。 imagine you have a book with hundreds of pages. Reading all of them at once would be overwhelming, right? That's where pagination comes in. ウェブ開発では、ページネーションは本を管理しやすいチャンクに分けるようなものです。1ページに表示するアイテム数を制限します。

Laravel、私たちのスーパーヒーローフレームワークには、ページネーションの機能が内蔵されています。しかし、時々、ページネーション結果に自分の特色を加えたいと思うことがあります。それがカスタマイズの役立ちます!

Laravelでの基本的なページネーション

まず、Laravelでのページネーションがどのように動作するか簡単な例を見てみましょう:

$users = User::paginate(15);

この行のコードは、データベースからユーザーを取得し、15人ずつページに区切って表示します。魔法のようですね!でも、もっと派手なページネーションにしたい場合はどうしますか?それがカスタマイズの旅の始まりです!

ページネーションビューのカスタマイズ

ステップ1: ページネーションビューのパブリッシュ

まず、Laravelのページネーションビューをパブリッシュします。心配しないでください!簡単です。ターミナルで以下のコマンドを実行します:

php artisan vendor:publish --tag=laravel-pagination

このコマンドは、Laravelに「ページネーションファイルを見せて、それを少し弄る」と言っているようなものです!

ステップ2: ビューの修正

resources/views/vendor/paginationに移動します。ここには複数のファイルがあります。まずdefault.blade.phpに注目します。このファイルは、ページネーションリンクの見た目をコントロールします。

以下は簡単なカスタマイズです:

@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- 前ページリンク --}}
@if ($paginator->onFirstPage())
<li class="disabled"><span>&laquo;</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif

{{-- ページネーション要素 --}}
@foreach ($elements as $element)
{{-- "三点リーダー"セパレータ --}}
@if (is_string($element))
<li class="disabled"><span>{{ $element }}</span></li>
@endif

{{-- リンクの配列 --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach

{{-- 次ページリンク --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
@else
<li class="disabled"><span>&raquo;</span></li>
@endif
</ul>
</nav>
@endif

このコードは最初は少し複雑に見えるかもしれませんが、以下のように分解します:

  1. 複数ページがあるかどうかを確認($paginator->hasPages())。
  2. ナビゲーションと無秩序リストを作成。
  3. 最初のページでない場合、前ページリンクを追加。
  4. ページネーション要素をループして各ページのリンクを追加。
  5. 更にページがある場合、次ページリンクを追加。

ページネーションのスタイリング

ページネーションの構造をカスタマイズしたら、少し綺麗に見せるためにCSSをスタイルシートに追加します:

.pagination {
display: flex;
list-style: none;
padding: 0;
}

.pagination li {
margin: 0 5px;
}

.pagination li a {
text-decoration: none;
padding: 5px 10px;
border: 1px solid #ddd;
color: #333;
}

.pagination li.active span {
background-color: #007bff;
color: white;
padding: 5px 10px;
border: 1px solid #007bff;
}

.pagination li.disabled span {
color: #ccc;
padding: 5px 10px;
border: 1px solid #ddd;
}

このCSSでページネーションがクリーンでモダンな見た目になります。コードに良いスーツを着せたようなものです!

高度なカスタマイズ

プレゼンターを使用したカスタムページネーション

さらに高度なカスタマイズを行うために、Laravelではカスタムプレゼンターを作成することができます。以下に作成方法を示します:

  1. 新しいファイルapp/Http/Presenters/CustomPaginationPresenter.phpを作成します:
<?php

namespace App\Http\Presenters;

use Illuminate\Pagination\BootstrapPresenter;

class CustomPaginationPresenter extends BootstrapPresenter
{
public function render()
{
if (!$this->hasPages()) {
return '';
}

return sprintf(
'<div class="custom-pagination">%s %s %s</div>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton()
);
}

protected function getAvailablePageWrapper($url, $page, $rel = null)
{
$rel = is_null($rel) ? '' : ' rel="' . $rel . '"';

return '<span class="page-item"><a class="page-link" href="' . $url . '"' . $rel . '>' . $page . '</a></span>';
}

protected function getDisabledTextWrapper($text)
{
return '<span class="page-item disabled"><span class="page-link">' . $text . '</span></span>';
}

protected function getActivePageWrapper($text)
{
return '<span class="page-item active"><span class="page-link">' . $text . '</span></span>';
}
}
  1. コントローラーでこのカスタムプレゼンターを使用します:
use App\Http\Presenters\CustomPaginationPresenter;

public function index()
{
$users = User::paginate(15);
$presenter = new CustomPaginationPresenter($users);

return view('users.index', compact('users', 'presenter'));
}
  1. ビューでカスタムプレゼンターを使用します:
{!! $presenter->render() !!}

結論

おめでとうございます!Laravelのページネーションのカスタマイズを学びました。基本的な修正から高度なプレゼンターまで、ページネーション結果を思い通りに見せることができるようになりました。

忘れないでください、これらの概念をマスターする鍵は練習です。さまざまなスタイルを作成し、プレゼンターを試してみて、最も重要なのは、楽しむことです!ページネーションは小さな詳細に見えるかもしれませんが、ユーザーの体験を大幅に向上させるのに役立ちます。

今回は以下のメソッドをカバーしました:

メソッド 説明
paginate() 基本的なページネーションメソッド
vendor:publish ページネーションビューのパブリッシュ
hasPages() 複数ページがあるか確認
onFirstPage() 最初のページか確認
previousPageUrl() 前ページのURLを取得
nextPageUrl() 次ページのURLを取得
currentPage() 現在のページ番号を取得
hasMorePages() 更にページがあるか確認

引き続きコードを書き、学び続けてください。優れた開発者もすべてが初めてから始まります。あなたはLaravelのページネーションのプロになる道を歩んでいます!

Credits: Image by storyset