viernes, 9 de junio de 2017

Personalizar la plantilla de paginacion en Laravel

   


En este post, voy a decirle cómo personalizar la vista de paginación en laravel 5.4.

En la mayor parte de la aplicación, la paginación es una tarea muy común y laravel PHP Framework tiene una excelente biblioteca para paginación y con la versión de laravel 5.3, se pueden personalizar fácilmente la plantilla de paginación o bien la creación de un archivo de paginación propia de forma manual o utilizando la opción existe es ejecutar comandos artisan publicar plantilla de paginación.

paginacion personalizada en laravel

Y esta es la nueva característica que se agrega con laravel 5.3.

Ejemplo básico de la paginación de laravel por defecto.


// routes file
Route::get('productos', function () {
    return view('productos.index')
        ->with('productos', Producto::paginate(10));
});



// resource/views/productos/index.blade.php
@foreach ($productos as $producto)
    <!-- ver los detalles productos -->
@endforeach
{!! $productos->links() !!}

El ejemplo de arriba le dará por defecto una sencilla vista de paginacion en laravel.

Ok, ahora voy a decirle cómo crear vistas de paginacion personalizadas en laravel.

Plantilla de paginación personalizada en laravel 5.4


Si usted quiere crear los archivos necesarios con un solo comando artisan, ejecute el siguiente comando:

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

Al ejecutar el comando anterior, verá el directorio de paginación en los siguiente ruta resources / views / vendor / y en el directorio de pagination se abran creado 4 archivos con el comando anterior:


  • bootstrap-4.blade.php
  • default.blade.php
  • simple-bootstrap-4.blade.php
  • simple-default.blade.php


Laravel utiliza el archivo default.blade.php para paginación predeterminada.

Puede crear manualmente su propia plantilla de paginación personalizada y vincularla con el método de enlaces de paginación para mostrar la vista de paginación según sus necesidades.

Ejemplo completo para crear una vista personalizada de paginación

Primero necesitamos crear una tabla con algunos datos ficticios para probar este código.

1- La tabla modelo de ejemplo:

He creado una tabla de productos con los campos (nombre, detalles) en nuestra base de datos con algunos datos.

Ahora crea un modelo correspondiente a la tabla:


class Producto extends Model
{
    public $fillable=['nombre','descripcion'];
}

2- Agregar ruta:

En este paso, simplemente añada una nueva ruta para la paginación personalizada en en el archivo routes / web.php


Route::get('producto','ProductoController@index');

3: Crear ProductoController.php:

En este paso, cree un ProductoController.php con el método index.


public function index(Request $request){     
      $productos=Producto::paginate(5);
      return view('productos',compact('productos'))->with('i', ($request->input('page', 1) - 1) * 5);
    }


4: Crear el archivo productos.blade.php

En este paso he creado un productos.blade.php en el siguiente directorio resources / views / productos.blade.php


<!DOCTYPE html>
<html>
<head>
    <title>Personalizar paginacion en Laravel</title>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <div class="table-responsive">
        <br><br>
        <table class="table table-striped">
            <thead>
            <tr class="heading">
                <th>ID</th>
                <th>Nombre</th>
                <th>Descripcion</th>
            </tr>
            </thead>
            <tbody>
                @foreach ($productos as $product)
                    <tr>
                        <td>{{ ++$i }}</td>
                        <td>{!! $product->nombre !!}</td>
                        <td>{!! $product->descripcion !!}</td>
                    </tr>
                @endforeach
            </tbody>
        </table>
        {!! $productos->links('pagination') !!}
    </div>
</div>
</body>
</html>


En el método links paso el nombre del archivo de la plantilla de paginacion personalizada que voy a utilizar.

5: crear una plantilla personalizada pagination.blade.php

Ahora en este último paso vamos a crear una plantilla que es utilizada por un solo paginator.

resources/views/pagination.blade.php

@if ($paginator->hasPages())
    <ul class="pager">
        {{-- Previous Page Link --}}
        @if ($paginator->onFirstPage())
            <li class="disabled"><span>? Atras</span></li>
        @else
            <li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">? Atras</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 my-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">Siquiente?</a></li>
        @else
            <li class="disabled"><span>Siquiente ?</span></li>
        @endif
    </ul>
@endif


Y eso seria todo :) espero que les sirva


César GI

About César GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.