Laravel - ページネーションのカスタマイズ
こんにちは、将来の開発者たち!今日は、Laravelのページネーションカスタマイズの素晴らしい世界に飛び込みます。あなたの近所の親切なコンピュータサイエンスの先生として、この旅をガイドするのがとても楽しみです。プログラミングが初めての人も心配しないでください。基本から始めて、少しずつ進めていきます。コーヒー(またはあなたの好みの茶)を飲みながら、始めましょう!
ページネーションとは?
カスタマイズに入る前に、まずページネーションとは何かを理解しましょう。 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>«</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</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">»</a></li>
@else
<li class="disabled"><span>»</span></li>
@endif
</ul>
</nav>
@endif
このコードは最初は少し複雑に見えるかもしれませんが、以下のように分解します:
- 複数ページがあるかどうかを確認(
$paginator->hasPages()
)。 - ナビゲーションと無秩序リストを作成。
- 最初のページでない場合、前ページリンクを追加。
- ページネーション要素をループして各ページのリンクを追加。
- 更にページがある場合、次ページリンクを追加。
ページネーションのスタイリング
ページネーションの構造をカスタマイズしたら、少し綺麗に見せるために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ではカスタムプレゼンターを作成することができます。以下に作成方法を示します:
- 新しいファイル
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>';
}
}
- コントローラーでこのカスタムプレゼンターを使用します:
use App\Http\Presenters\CustomPaginationPresenter;
public function index()
{
$users = User::paginate(15);
$presenter = new CustomPaginationPresenter($users);
return view('users.index', compact('users', 'presenter'));
}
- ビューでカスタムプレゼンターを使用します:
{!! $presenter->render() !!}
結論
おめでとうございます!Laravelのページネーションのカスタマイズを学びました。基本的な修正から高度なプレゼンターまで、ページネーション結果を思い通りに見せることができるようになりました。
忘れないでください、これらの概念をマスターする鍵は練習です。さまざまなスタイルを作成し、プレゼンターを試してみて、最も重要なのは、楽しむことです!ページネーションは小さな詳細に見えるかもしれませんが、ユーザーの体験を大幅に向上させるのに役立ちます。
今回は以下のメソッドをカバーしました:
メソッド | 説明 |
---|---|
paginate() |
基本的なページネーションメソッド |
vendor:publish |
ページネーションビューのパブリッシュ |
hasPages() |
複数ページがあるか確認 |
onFirstPage() |
最初のページか確認 |
previousPageUrl() |
前ページのURLを取得 |
nextPageUrl() |
次ページのURLを取得 |
currentPage() |
現在のページ番号を取得 |
hasMorePages() |
更にページがあるか確認 |
引き続きコードを書き、学び続けてください。優れた開発者もすべてが初めてから始まります。あなたはLaravelのページネーションのプロになる道を歩んでいます!
Credits: Image by storyset