Laravel - Personalizzazioni della Paginazione

Ciao, futuri sviluppatori! Oggi ci immergeremo nel meraviglioso mondo delle personalizzazioni della paginazione in Laravel. Come il tuo amico del quartiere insegnante di scienze informatiche, sono entusiasta di guidarti in questo viaggio. Non preoccuparti se sei nuovo alla programmazione - inizieremo dalle basi e lavoreremo fino ad arrivarci. Allora, prenditi una tazza di caffè (o tè, se è la tua cosa), e iniziamo!

Laravel - Pagination Customizations

Cos'è la Paginazione?

Prima di immergerci nelle personalizzazioni, capiremo cos'è la paginazione. Immagina di avere un libro con centinaia di pagine. Leggerle tutte insieme sarebbe travolgente, vero? Ecco dove entra in gioco la paginazione. Nello sviluppo web, la paginazione è come dividere il tuo libro in porzioni gestibili, mostrando un numero limitato di elementi per pagina.

Laravel, il nostro super framework, arriva con funzionalità di paginazione integrate che rendono le nostre vite più semplici. Ma a volte vogliamo aggiungere un tocco personale a questi risultati paginati. Ecco dove le personalizzazioni diventano utili!

Paginazione di Base in Laravel

Iniziamo con un semplice esempio di come funziona la paginazione in Laravel:

$users = User::paginate(15);

Questa riga di codice recupera gli utenti dal database e li paginazione, mostrando 15 utenti per pagina. È come magia, vero? Ma cosa succede se vogliamo rendere questa paginazione più elegante? È qui che inizia il nostro viaggio di personalizzazione!

Personalizzare la Vista della Paginazione

Passo 1: Pubblicare le Viste di Paginazione

Prima di tutto, dobbiamo pubblicare le viste di paginazione di Laravel. Non preoccuparti; è più semplice di quanto sembri! Esegui questo comando nel tuo terminale:

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

Questo comando è come dire a Laravel, "Ehi, voglio vedere quei file di paginazione così posso modifyingli!"

Passo 2: Modificare la Vista

Ora, naviga in resources/views/vendor/pagination. Troverai diversi file qui. Concentriamoci su default.blade.php. Questo file controlla come appariranno i nostri link di paginazione.

Ecco una semplice personalizzazione:

@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Link alla Pagina Precedente --}}
@if ($paginator->onFirstPage())
<li class="disabled"><span>&laquo;</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif

{{-- Elementi di Paginazione --}}
@foreach ($elements as $element)
{{-- Separatore "Tre Punti" --}}
@if (is_string($element))
<li class="disabled"><span>{{ $element }}</span></li>
@endif

{{-- Array di Link --}}
@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

{{-- Link alla Pagina Successiva --}}
@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

Questo codice potrebbe sembrare intimidatorio all'inizio, ma analizziamolo:

  1. Controlliamo se ci sono più pagine ($paginator->hasPages()).
  2. Creiamo una navigazione con un elenco non ordinato.
  3. Aggiungiamo un link "Precedente" se non siamo sulla prima pagina.
  4. Loopiamo attraverso gli elementi di paginazione, aggiungendo link per ogni pagina.
  5. Aggiungiamo un link "Successivo" se ci sono altre pagine.

Stile della Paginazione

Ora che abbiamo personalizzato la struttura della nostra paginazione, rendiamola bella! Aggiungisome CSS al tuo foglio di stili:

.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;
}

Questo CSS darà alla tua paginazione un aspetto pulito e moderno. È come mettere un belabito sul tuo codice!

Personalizzazioni Avanzate

Personalizzazione della Paginazione Utilizzando un Presenter

Per personalizzazioni più avanzate, Laravel ci permette di creare un presenter personalizzato. Creiamo uno:

  1. Crea un nuovo file 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. Usa questo presenter nel tuo controller:
use App\Http\Presenters\CustomPaginationPresenter;

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

return view('users.index', compact('users', 'presenter'));
}
  1. Nella tua vista, usa il presenter:
{!! $presenter->render() !!}

Conclusione

Congratulazioni! Hai appena imparato come personalizzare la paginazione in Laravel. Dalle modifiche di base ai presenters avanzati, ora hai il potere di rendere i tuoi risultati paginati esattamente come vuoi.

Ricorda, la chiave per padroneggiare questi concetti è la pratica. Prova a creare diversi stili, esperimenta con il presenter, e, soprattutto, divertiti! La paginazione potrebbe sembrare un dettaglio piccolo, ma può migliorare greatly l'esperienza utente della tua applicazione.

Mentre chiudiamo, ecco una tabella che riassume i metodi che abbiamo coperto:

Metodo Descrizione
paginate() Metodo di paginazione di base
vendor:publish Pubblica le viste di paginazione
hasPages() Controlla se ci sono più pagine
onFirstPage() Controlla se si è sulla prima pagina
previousPageUrl() Ottiene l'URL per la pagina precedente
nextPageUrl() Ottiene l'URL per la pagina successiva
currentPage() Ottiene il numero della pagina corrente
hasMorePages() Controlla se ci sono altre pagine

Continua a programmare, continua a imparare, e ricorda - ogni grande sviluppatore è iniziato come principiante. Sei sulla buona strada per diventare un esperto di paginazione in Laravel!

Credits: Image by storyset