Laravel - 分頁自訂化
Hello, 動手開發者們!今天,我們將要進入 Laravel 分頁自訂化的精彩世界。作為你們親切的鄰居電腦科學老師,我非常興奮能夠帶領你們踏上這個旅程。如果你是編程新手,別擔心——我們會從基礎開始,逐步學習。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們開始吧!
分頁是什麼?
在我們進行自訂化之前,讓我們先了解什麼是分頁。想像一下你有一本有數百頁的書。一次性讀完它們會讓人覺得壓力山大,對吧?這就是分頁的作用。在網頁開發中,分頁就像把你的書分成可管理的小部分,每頁顯示有限的項目數量。
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 將給你的分頁一個乾淨、時尚的外觀。就像是給你的代碼穿上一套漂亮的西裝!
高級自訂化
使用Presenter進行自訂分頁
對於更高级的自訂化,Laravel 允許我們創建一個自訂的 presenter。讓我們來創建一個:
- 創建一個新文件
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>';
}
}
- 在你的控制器中使用這個自訂 presenter:
use App\Http\Presenters\CustomPaginationPresenter;
public function index()
{
$users = User::paginate(15);
$presenter = new CustomPaginationPresenter($users);
return view('users.index', compact('users', 'presenter'));
}
- 在你的視图中使用自訂 presenter:
{!! $presenter->render() !!}
結論
恭喜你!你剛剛學會了如何自訂 Laravel 的分頁。從基本修改到高级的 presenters,你现在有能力讓你的分頁結果看起來完全符合你的要求。
記住,掌握這些概念的關鍵是實踐。嘗試創建有不同的樣式,試驗 presenter,最重要的是,享受其中的樂趣!分頁可能看起來像是小細節,但它可以大大提升你應用程序的用户体验。
當我們結束時,這裡有一個總結我們所涵蓋方法的表格:
方法 | 描述 |
---|---|
paginate() |
基本分頁方法 |
vendor:publish |
發布分頁視圖 |
hasPages() |
檢查是否有多个页面 |
onFirstPage() |
檢查是否在第一页 |
previousPageUrl() |
获取上一页的 URL |
nextPageUrl() |
获取下一页的 URL |
currentPage() |
获取当前页码 |
hasMorePages() |
檢查是否还有更多页面 |
繼續編程,繼續學習,記住——每個偉大的開發者都是從初學者開始的。你正在成為 Laravel 分頁專家的路上!
Credits: Image by storyset