Pagination Laravel : Afficher une numérotation continue des éléments par page

Mis à jour il y a 5 mois

Un tutoriel pour afficher une numérotation continue des éléments d'une collection sur toutes les pages de la pagination dans un projet Laravel.

Wilo Ahadi

Auteur

Wilo A.

Technologies

Laravel, PHP

🌎 La version anglaise de cette publication : Pagination Laravel : Display continuous numbering of elements per page

La pagination dans Laravel est un mécanisme qui permet de diviser les données en plusieurs pages pour  faciliter la présentation et la navigation lorsqu'il y a un grand nombre de résultats.

Considérons une collection de publications ou $posts que nous récupérons et paginons dans la méthode index du contrôleur pour en afficher 100 par page :

public function index()
{
    $posts = Post::paginate(100);
    return view("posts.index", compact('posts'));
}

Sur la vue resources/views/posts/index.blade.php on peut afficher 100 posts par page et présenter les liens des différentes pages de la pagination comme ceci :

@extends('layouts.app')
@section('content')
<table>
        <thead>
            <tr>
                <th>No.</th>
                <th>Title</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($posts as $post)
            <tr>
                <td>{{ $loop->iteration }}</td>
                <td>{{ $post->title }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    
    {{ $posts->links() }}
    
@endsection

Dans ce code source, $loop->iteration permet d'afficher le numéro d'itération à l'intérieur de la boucle et $posts->links() d'afficher les liens de pagination.

Mais remarquez, pour chaque page individuelle l'itération commence à 1. Cela signifie que si nous sommes sur la page 2, la première itération de cette page sera considérée comme la première itération dans l'ensemble de la pagination.

Si nous voulons afficher une numérotation continue sur toutes les pages d'une pagination, nous pouvons combiner le nombre d'éléments par page, le numéro de la page actuelle et l'itération en cours :

@foreach ($posts as $post)
<tr>  
    <td>{{ ($posts->perPage() * ($posts->currentPage() - 1)) + $loop->iteration }}</td>  
    <td>{{ $post->title }}</td>
</tr>
@endforeach

Nous avons dans ce code source :

  • $posts->perPage() : le nombre d'éléments par page
  • $posts->currentPage() : le numéro de la page actuelle

En multipliant le nombre d'éléments par page par le numéro de la page actuelle moins un, nous obtenons l'index de départ de cette page. En ajoutant $loop->iteration, nous obtenons l'index continu pour chaque élément de la collection paginée.

Ainsi même si l’on passe de la page 1 à la page 2, la numérotation continue à partir du dernier index de la page précédente.

Portez-vous bien ! 😎

Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.

Wilo Ahadi

Wilo Ahadi, l'auteur

Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School

Voir profil

Commentaires