X

Personnalisation des modèles de pagination dans Laravel 5.3


La bibliothèque de pagination de Laravel est brillante, car la pagination est une tâche courante qui représente une quantité de travail surprenante à mettre en œuvre. Dans le passé, si vous vouliez personnaliser vos modèles de pagination, il était tout aussi simple de personnaliser votre modèle de pagination que de travailler avec le reste de la bibliothèque de pagination.

Cependant, dans le but de faciliter l’extraction de la bibliothèque de pagination pour les projets non-Laravel, Laravel 5.0 (ou peut-être même plus tôt ?) a introduit un système beaucoup plus complexe, mais plus portable, pour les modèles de pagination.

Heureusement, dans Laravel 5.3, nous allons revenir à ce qui a toujours été : simple et facile.

Comment fonctionne la pagination dans Laravel

Si vous n’êtes pas familier, voici un bref aperçu de la façon dont cela fonctionne pour utiliser la pagination dans Laravel.

// routes file
Route::get('tasks', function () {
    return view('tasks.index')
        ->with('tasks', Task::paginate(10));
});
// resource/views/tasks/index.blade.php
@foreach ($tasks as $task)
    <!-- echo the task or whatever -->
@endforeach

{{ $tasks->links() }}

Par défaut, le paginate() La méthode sur vos objets Eloquent lit les paramètres de requête de votre requête et détecte la page sur laquelle vous vous trouvez. Donc, dans cet exemple, il lira le ?page paramètre de requête et récupérez 10 enregistrements pour cette page. Il passera ces 10, et quand nous foreach sur le $tasks variable, nous allons simplement boucler sur ces 10.

Mais si vous récupérez ces 10 enregistrements en utilisant paginate() au lieu de quelque chose comme all()vous obtenez une nouvelle méthode disponible sur votre $tasks objet (ou autre résultat éloquent) nommé links()et cette méthode renvoie la chaîne de vue appropriée pour afficher une liste de boutons de pagination :

<ul class="pagination">
    <li class="disabled"><span>&laquo;</span></li>

    <li class="active"><span>1</span></li>
    <li><a href="http://53pagination.dev?page=2">2</a></li>
    <li><a href="http://53pagination.dev?page=3">3</a></li>

    <li><a href="http://53pagination.dev?page=2" rel="next">&raquo;</a></li>
</ul>

Personnalisation du modèle de pagination dans Laravel 5.3

OK, alors passons enfin à la saleté. Comment personnalisez-vous ce modèle en 5.3 ?

Par défaut, le modèle qui rend ceci peut être trouvé dans le Illuminate\Pagination composant: resources/views/bootstrap-3.blade.php. Voici à quoi cela ressemble en ce moment :

<ul class="pagination">
    <!-- Previous Page Link -->
    @if ($paginator->onFirstPage())
        <li class="disabled"><span>&laquo;</span></li>
    @else
        <li><a href="https://mattstauffer.com/blog/{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
    @endif

    <!-- Pagination Elements -->
    @foreach ($elements as $element)
        <!-- "Three Dots" Separator -->
        @if (is_string($element))
            <li class="disabled"><span>{{ $element }}</span></li>
        @endif

        <!-- Array Of Links -->
        @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

    <!-- Next Page Link -->
    @if ($paginator->hasMorePages())
        <li><a href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
    @else
        <li class="disabled"><span>&raquo;</span></li>
    @endif
</ul>

Si vous souhaitez personnaliser la pagination, vous avez deux options : vous pouvez soit publier la vue intégrée et la modifier, soit créer un nouveau fichier et y lier manuellement le Paginator.

Publication des fichiers

L’option la plus simple est probablement d’exécuter php artisan vendor:publish. Il publiera le modèle sur vendor/pagination et vous pouvez simplement le modifier ici. Il s’agit de l’option préférée, sauf si vous avez des besoins de personnalisation spécifiques.

Lier manuellement les fichiers

Si vous souhaitez plutôt créer votre propre fichier de pagination et le lier manuellement, vous pouvez également le faire. Créez un nouveau fichier qui est une copie de ce fichier et modifiez-le selon vos besoins. Enregistrez-le quelque part dans resources/views; pour l’instant, restons simples et utilisons resources/views/partials/pagination.blade.php.

Maintenant, enregistrons-le. Courir \Illuminate\Pagination\LengthAwarePaginator::defaultView('partials.paginator') dans le boot() méthode d’un fournisseur de services.

Remarque : Si vous souhaitez personnaliser le modèle utilisé par un seul paginateur, vous pouvez transmettre le nom de la vue au links() méthode: {{ $users->links('partials.paginator') }}.

Aperçu

Donc, pour que tout cela fonctionne, j’ai suivi ces étapes:

  1. Cloner la dernière version de Laravel 5.3
  2. Installation du compositeur
  3. php artisan vendor:publish
  4. Modifier resources/views/vendor/pagination/default.blade.php et personnalisez-le selon le désir de mon cœur

C’est ça!

Remarque : Ces instructions vous montrent comment personnaliser le paginateur sensible à la longueur, qui est le plus courant. Mais si vous travaillez avec le paginateur simple, vous pouvez également le personnaliser. Utilisez simplement le fichier nommé simple-default comme base au lieu de default.