jairogarcíarincón

Paginación de noticias


1.15K

Introducción



A medida que vayamos creando noticias, vamos a necesitar implementar un sistema de paginación.


NoticiaController



Laravel nos da la solución de una manera sencilla, simplemente utilizando el método paginate() dentro de una query (o el método simplePaginate() si solo necesitamos los enlaces de anterior y siguiente.

En ambos casos, incluiremos como parámetro el número de resultados que queramos mostrar en cada hoja, si bien según su API podríamos incluir los siguientes:

paginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', int|null $page = null)

  • int $perPage: Número de elementos por página.

  • array $columns: Columnas a mostrar (por defecto todas).

  • string $pageName: Nombre de la variable para el GET (por defecto page).

  • int|null $page: Página actual.


En nuestro caso, modificaríamos el método index() de NoticiaController de la siguiente forma:



NOTA: Si estás extendiendo NoticiaController desde Controller y no desde AppController según el ejercicio propuesto, Laravel te exige que el método index() de Controller que estás extendiendo también reciba el parámetro Request $request, en cuyo caso deberás además hacer uso de dicho namespace (use Illuminate\Http\Request). Este es un ejemplo de por qué es mejor dejar Controller sin métodos y extender todos los controladores desde ese.


Vista de listado de noticias

Una vez que en el método del controlador estamos utilizando el método paginate(), en la vista asociada al mismo podemos utilizar diferentes métodos para mostrar los enlaces a las diferentes páginas.

Todos ellos están definidos en Paginator Instance Methods, pero lo más relevantes son:

  • $results->count(): Número de elementos en la página actual.

  • $results->items(): Elementos en la página actual.

  • $results->total(): Número de elementos totales.

  • $results->currentPage(): Número de página actual.

  • $results->previousPageUrl(): Enlace a la página anterior.

  • $results->nextPageUrl(): Enlace a la página siguiente.

  • $results->url($page): Enlace a una página especificada.


De este modo, podríamos modificar el listado de noticias (archivo resources/views/admin/noticias/index.php) de la siguiente forma:



AppServiceProvider



Además, dado que desde Laravel 8 las vistas de paginación se realizan por defecto en Tailwind CSS, debemos modificar la clase app/Providers/AppServiceProvider para indicar a Laravel que queremos utilizar la paginación por defecto:




Hoja de estilos (public/css/admin.css)



Para finalizar y dar estilo a los enlaces de paginación, solo nos quedaría añadir al final de nuestros estilos lo siguiente:



paginación de noticias


Ejercicio propuesto

  • Modifica el listado de usuarios para que también incluya paginación.




Publicado el 21 de Mayo de 2022

bloggestor de contenidoslaravelphpcssjquery