Personalizaciones de paginación de Laravel

Para obtener información sobre Personalizar paginación, debe comprender los siguientes puntos.

  • que es paginacion
  • tipos de paginacion
  • ¿Cuáles son los métodos
  • Pasos para escribir personalizar la paginación de laravel

¿Qué es la paginación?

La paginación es una barra de navegación que ayuda a los usuarios a pasar de una página a otra. Personalizar paginación significa diseñar la barra de navegación de paginación. Los documentos de Laravel dicen que Bootstrap CSS es el CSS predeterminado para diseñar la paginación.

En otros marcos, la paginación puede ser dolorosa, pero Laravel lo hace más fácil. Hay una única opción de configuración en app/config/view.php

El método pagination() especifica qué vista debe usarse para crear enlaces de paginación.

PHP

<?php
    
// app/Http/Controllers/HomeController.php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Http\Request;
class StudentController extends Controller {
    public function index() {
        
        // Show all of the users for the application.
        $students = Student::latest()->paginate(5);
        return view('students', compact('students'));
    }
}

Tipos de paginación: Hay dos formas de escribir métodos de paginación 

  1. Método simplePaginate()
  2. método paginar()

La diferencia entre los métodos es que la vista paginar() mostrará un » rango » de enlaces basados ​​en la página actual, mientras que la vista simple Paginar () muestra solo los botones Anterior y Siguiente .

¿Cuáles son los métodos?

Algunos métodos están disponibles en los documentos de laravel para definir las propiedades de la paginación de laravel. Hay métodos importantes que se enumeran a continuación. 

  • count(): cuenta el número de entradas en la página actual.
  • getCurrentPage(): indica el número de página actual.
  • getFirstItem(): F grabe el primer elemento en los resultados.
  • getOptions(): Obtiene las opciones del paginador.
  • getUrlRange($start, $end): establece un rango de URL de paginación.
  • getlastPage(): Obtener la última página disponible. (Este método no está disponible mientras se usa simplePaginate).
  • nextPageUrl(): Obtener URL para la página siguiente.
  • onFirstPage(): determina si el paginador está en la primera página.
  • perPage(): el número de elementos que se mostrarán por página.
  • anteriorPageUrl(): Obtiene la URL de la página anterior.

Personalizar la vista de paginación: de forma predeterminada, las vistas representadas para mostrar los enlaces de paginación son compatibles con el marco Bootstrap CSS. La forma más fácil de personalizar las vistas de paginación es exportándolas al directorio de recursos/vistas/proveedor usando el comando  vendor:publish

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

Este comando creará automáticamente la carpeta /resources/views/vendor/pagination.

El archivo bootstrap-4 blade.php está dentro de la vista de paginación predeterminada correspondiente. Puede editar este archivo para modificar el HTML de paginación. 

Si desea diseñar una vista de paginación diferente como la vista de paginación predeterminada, es posible que use la vista predeterminada del paginador y el método SimpleView predeterminado dentro de su AppServiceProvider:

PHP

<?php
use Illuminate\Pagination\Paginator;
public function boot() {
    Paginator::defaultView('view-name');
    Paginator::defaultSimpleView('view-name');
}
?>

Si no desea utilizar Bootstrap CSS, cree su propio archivo custom.blade.php. 

Pasos para escribir y personalizar la paginación de Laravel: En esta sección, presentamos cómo se agrega y personaliza la paginación. Para personalizar laravel, deberá seguir los siguientes pasos:

  1. Haz un modelo
  2. Hacer controlador y ver
  3. Obtener datos de la tabla de la base de datos
  4. Mostrar datos con paginación

Crear modelo: para obtener datos de la tabla de la base de datos, desea crear un modelo. Recuerde que el nombre del modelo es el mismo que el nombre de la tabla en la base de datos que desea mostrar. Puede usar el siguiente comando para crear un modelo 

php artisan make : model User;

Crear controlador y vista: luego, en el segundo paso, debe crear un controlador para crear una conexión entre el modelo y la página de vista. Puede usar el siguiente comando para crear un controlador 

php artisan make : controller StudentController;

PHP

<?php
#app/Http/Controllers/HomeController.php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Http\Request;
class StudentController extends Controller {
    public function index() {
        $students = Student::latest()->paginate(5);
        return view('students', compact('students'));
    }
}
?>

Obtener datos de una tabla de base de datos: entonces desea actualizar web.php en el directorio de ruta para agregar controladores en la ruta 

PHP

<?php
    #routes/web.php
    // code
    Route::get('/', 'HomeController@index');
?>

Mostrar datos con paginación: primero, creamos custom.blade.php y luego lo extendemos a la vista de los estudiantes 

HTML

<!DOCTYPE html>
<html>
  
<head>
    <title>Page Title</title>
</head>
  
<body>
    <h2>Welcome To GFG</h2>
      
<p>Default code has been loaded into the Editor.</p>
  
</body>
<!-- resources/views/vendor/pagination/custom.blade.php -->
  
@if ($paginator->hasPages())
<nav aria-label="Page navigation example">
    <ul class="pagination justify-content-center">
        @if ($paginator->onFirstPage())
        <li class="page-item disabled">
            <a class="page-link" href="#" 
               tabindex="-1">Previous</a>
        </li>
        @else
        <li class="page-item"><a class="page-link" 
            href="{{ $paginator->previousPageUrl() }}">
                  Previous</a>
          </li>
        @endif
  
        @foreach ($elements as $element)
        @if (is_string($element))
        <li class="page-item disabled">{{ $element }}</li>
        @endif
  
        @if (is_array($element))
        @foreach ($element as $page => $url)
        @if ($page == $paginator->currentPage())
        <li class="page-item active">
            <a class="page-link">{{ $page }}</a>
        </li>
        @else
        <li class="page-item">
            <a class="page-link" 
               href="{{ $url }}">{{ $page }}</a>
        </li>
        @endif
        @endforeach
        @endif
        @endforeach
  
        @if ($paginator->hasMorePages())
        <li class="page-item">
            <a class="page-link" 
               href="{{ $paginator->nextPageUrl() }}" 
               rel="next">Next</a>
        </li>
        @else
        <li class="page-item disabled">
            <a class="page-link" href="#">Next</a>
        </li>
        @endif
    </ul>
  </nav>
    @endif
  
</html>

Luego, creamos una página de vista para mostrar los datos como una lista de usuarios. Es el archivo blade.php ej. estudiante.blade.php

HTML

<!DOCTYPE html>
<html>
  
<head>
    <title>User list</title>
</head>
  
<body>
    <!-- resources/views/students.blade.php -->
    @extends('students.layout')
    @section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left text-center">
                <h2>Laravel 8 CRUD Operation 
                  Tutorial for Beginners</h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-success" 
                   href="{{ route('students.create') }}">
                    Create Student</a>
            </div><br>
        </div>
    </div>
    @if ($message = Session::get('success'))
    <div class="alert alert-success"> <span>
            {{ $message }}</span>
    </div> @endif
    <table class="table table-bordered">
        <tr>
            <th>No</th>
            <th>Firstname</th>
            <th>Lastname</th>
            <th>Age</th>
            <th>Action</th>
        </tr> @foreach ($students as $student)
        <tr>
            <td>{{ ++$i }}</td>
            <td>{{ $student->firstname }}</td>
            <td>{{ $student->lastname }}</td>
            <td>{{ $student->age }}</td>
            <td>
                <form action=
"{{ route('students.destroy',$student->id) }}" method="POST">
                    <a class="btn btn-info" href=
"{{ route('students.show',$student->id) }}">Show</a>
                    <a class="btn btn-primary" href=
"{{ route('students.edit',$student->id) }}">Edit</a>
                    @csrf @method('DELETE')
                    <button type="submit" onclick=
"return confirm('Do you really want to delete student!')"
                        class="btn btn-danger">Delete</button>
                </form>
            </td>
        </tr> @endforeach
    </table>
    {{ $students->links('vendor.pagination.custom') }}
    @endsection
</body>
  
</html>

Producción:

Laravel personalizar Paginación 

Publicación traducida automáticamente

Artículo escrito por jyotsnarasam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *