Saltar a contenido

Paginación

En toda aplicación hay un momento en el que se tienen que listar entidades y en el caso que sean muchos elementos realizar una paginación. Es por ello que, para mejorar la experiencia del usuario se debe conocer la manera correcta de hacerlo.

Listado

Para realizar el listado de nuestros recursos, nos centraremos en el método index() y crearemos una vista específica para ello. En el controlador lo que haremos será pasar los recursos que queramos que sean mostrados.

backend\PostController
<?php

public function index()
{
    $posts = Post::get();

    return view('backend.index', compact('posts'));
}

En la vista, los mostramos uno a uno gracias al uso del foreach.

backend\index.blade.php
@extends('dashboard.master')

@section('content')

    <a href="{{ route('post.create') }}" target="blank">Create</a>

    <table>
        <thead>
            <tr>
                <td>Id</td>
                <td>Title</td>
                <td>Posted</td>
                <td>Category</td>
                <td>Options</td>
            </tr>
        </thead>
        <tbody>
            @foreach ($posts as $p)
                <tr>
                    <td>{{ $p->id }}</td>
                    <td>{{ $p->title }}</td>
                    <td>{{ $p->posted }}</td>
                    <td>
                        <a href="{{ route('post.show',$p) }}">Show</a>
                        <a href="{{ route('post.edit',$p) }}">Edit</a>
                        <form action="{{ route('post.destroy', $p) }}" method="post">
                            @method('DELETE')
                            @csrf
                            <button type="submit">Delete</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>

@endsection

En los listados podremos poner diferentes opciones o acciones de nuestros recursos como son el mostrarlos, editarlos o eliminarlos.

Listado con paginación

La paginación no es más que mostrar conjuntos o subconjuntos de recursos poco a poco. El cambio se realiza en el controlador, donde haremos uso de paginate() que será el encargado de gestionar el listado con el número de elementos que le indiquemos.

backend\PostController
<?php

public function index()
{
    $posts = Post::paginate(10);

    return view('backend.index', compact('posts'));
}

Mientras que en la vista del index necesitaremos mostrar los links a las siguientes páginas:

backend\index.blade.php
@extends('dashboard.master')

@section('content')

    <a href="{{ route('post.create') }}" target="blank">Create</a>

    <table>
        <thead>
            <tr>
                <td>Id</td>
                <td>Title</td>
                <td>Posted</td>
                <td>Category</td>
                <td>Options</td>
            </tr>
        </thead>
        <tbody>
            @foreach ($posts as $p)
                <tr>
                    <td>{{ $p->id }}</td>
                    <td>{{ $p->title }}</td>
                    <td>{{ $p->posted }}</td>
                    <td>
                        <a href="{{ route('post.show',$p) }}">Show</a>
                        <a href="{{ route('post.edit',$p) }}">Edit</a>
                        <form action="{{ route('post.destroy', $p) }}" method="post">
                            @method('DELETE')
                            @csrf
                            <button type="submit">Delete</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
    {{ $posts->links() }}
@endsection

Todo el trabajo lo realiza la función links() que como ves es la que se encarga de gestionar los recursos que se ven por página.

Actividad

  • 🧪 PR 724. (RA8 / CE8f / IC1 / 3p) - Se te solicita programar la funcionalidad del paginado de productos. Ha se ser una configuración que se almacene en la base de datos, de inicio quieren que se pagine de 4 en 4.