Laravel - 分頁自訂化

Hello, 動手開發者們!今天,我們將要進入 Laravel 分頁自訂化的精彩世界。作為你們親切的鄰居電腦科學老師,我非常興奮能夠帶領你們踏上這個旅程。如果你是編程新手,別擔心——我們會從基礎開始,逐步學習。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們開始吧!

Laravel - Pagination Customizations

分頁是什麼?

在我們進行自訂化之前,讓我們先了解什麼是分頁。想像一下你有一本有數百頁的書。一次性讀完它們會讓人覺得壓力山大,對吧?這就是分頁的作用。在網頁開發中,分頁就像把你的書分成可管理的小部分,每頁顯示有限的項目數量。

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 將給你的分頁一個乾淨、時尚的外觀。就像是給你的代碼穿上一套漂亮的西裝!

高級自訂化

使用Presenter進行自訂分頁

對於更高级的自訂化,Laravel 允許我們創建一個自訂的 presenter。讓我們來創建一個:

  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. 在你的控制器中使用這個自訂 presenter:
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:
{!! $presenter->render() !!}

結論

恭喜你!你剛剛學會了如何自訂 Laravel 的分頁。從基本修改到高级的 presenters,你现在有能力讓你的分頁結果看起來完全符合你的要求。

記住,掌握這些概念的關鍵是實踐。嘗試創建有不同的樣式,試驗 presenter,最重要的是,享受其中的樂趣!分頁可能看起來像是小細節,但它可以大大提升你應用程序的用户体验。

當我們結束時,這裡有一個總結我們所涵蓋方法的表格:

方法 描述
paginate() 基本分頁方法
vendor:publish 發布分頁視圖
hasPages() 檢查是否有多个页面
onFirstPage() 檢查是否在第一页
previousPageUrl() 获取上一页的 URL
nextPageUrl() 获取下一页的 URL
currentPage() 获取当前页码
hasMorePages() 檢查是否还有更多页面

繼續編程,繼續學習,記住——每個偉大的開發者都是從初學者開始的。你正在成為 Laravel 分頁專家的路上!

Credits: Image by storyset