Paginación en Laravel-arreglo
Paginación en Laravel-arreglo
Tutorial completo sobre paginación en Laravel, basado en el ejemplo que proporcionas y el contenido del video. El tutorial incluirá:
Creación del controlador con un arreglo estático de 30 tareas.
Uso de paginación manual (simulando datos) con
LengthAwarePaginator.Vista para mostrar las tareas paginadas de 10 en 10.
Explicación basada en el video (uso de
paginateen Eloquent, pero adaptado a arreglos).Personalización de estilos con Bootstrap o Tailwind (seguiremos el enfoque del video).
Dado que el ejemplo usa un arreglo estático (no base de datos), usaremos Illuminate\Pagination\LengthAwarePaginator para paginar manualmente.
Además, incluiremos la configuración de paginación en AppServiceProvider para usar Bootstrap (como menciona el video) y mostraremos los enlaces en la vista.
Vamos a escribir el tutorial en español, con pasos claros y explicaciones.
Tutorial: Paginación en Laravel con datos estáticos
En este tutorial aprenderás a implementar paginación en Laravel, incluso cuando tus datos no provienen de una base de datos. Usaremos un arreglo estático de 30 tareas y las mostraremos de 10 en 10, con enlaces de navegación.
1. Crear el controlador y los datos de ejemplo
Primero, crea un controlador llamado TareaController (si no lo tienes) con el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
class TareaController extends Controller
{
// Arreglo estático de 30 tareas (simulando datos)
private $tareas = [
['id' => 1, 'nombre' => 'Comprar pan'],
['id' => 2, 'nombre' => 'Estudiar Laravel'],
['id' => 3, 'nombre' => 'Hacer ejercicio'],
['id' => 4, 'nombre' => 'Leer un libro'],
['id' => 5, 'nombre' => 'Pasear al perro'],
['id' => 6, 'nombre' => 'Preparar la cena'],
['id' => 7, 'nombre' => 'Limpiar la casa'],
['id' => 8, 'nombre' => 'Hacer la compra semanal'],
['id' => 9, 'nombre' => 'Revisar correos'],
['id' => 10, 'nombre' => 'Escribir en el blog'],
['id' => 11, 'nombre' => 'Aprender Vue.js'],
['id' => 12, 'nombre' => 'Practicar inglés'],
['id' => 13, 'nombre' => 'Meditar 10 minutos'],
['id' => 14, 'nombre' => 'Llamar a familiares'],
['id' => 15, 'nombre' => 'Planificar viaje'],
['id' => 16, 'nombre' => 'Organizar escritorio'],
['id' => 17, 'nombre' => 'Actualizar redes sociales'],
['id' => 18, 'nombre' => 'Hacer un curso online'],
['id' => 19, 'nombre' => 'Preparar presentación'],
['id' => 20, 'nombre' => 'Ir al gimnasio'],
['id' => 21, 'nombre' => 'Cocinar una receta nueva'],
['id' => 22, 'nombre' => 'Leer documentación de Laravel'],
['id' => 23, 'nombre' => 'Ver una película'],
['id' => 24, 'nombre' => 'Hacer la colada'],
['id' => 25, 'nombre' => 'Arreglar el jardín'],
['id' => 26, 'nombre' => 'Escribir un poema'],
['id' => 27, 'nombre' => 'Aprender a tocar guitarra'],
['id' => 28, 'nombre' => 'Organizar la despensa'],
['id' => 29, 'nombre' => 'Hacer un voluntariado'],
['id' => 30, 'nombre' => 'Planificar el menú semanal'],
];
public function index(Request $request)
{
// Obtener el número de página desde la URL, por defecto 1
$page = $request->get('page', 1);
// Cantidad de elementos por página
$perPage = 10;
// Total de elementos
$total = count($this->tareas);
// Obtener los elementos de la página actual usando array_slice
$items = array_slice($this->tareas, ($page - 1) * $perPage, $perPage);
// Crear una instancia de LengthAwarePaginator
$tareas = new LengthAwarePaginator(
$items, // Items de la página actual
$total, // Total de items
$perPage, // Items por página
$page, // Página actual
['path' => $request->url()] // Para mantener la URL base
);
// Debug (como en el ejemplo original)
dump($this->tareas); // Muestra en la barra de depuración
return view('tareas.index', compact('tareas'));
}
}Explicación:
Creamos un arreglo
$tareascon 30 elementos (id y nombre).En el método
index:Obtenemos la página actual de la URL (
page).Definimos
$perPage = 10.Calculamos el total de elementos.
Usamos
array_slicepara extraer solo los elementos de la página actual.Instanciamos
LengthAwarePaginatorcon los parámetros necesarios.Pasamos la variable
$tareasa la vista.
2. Crear la ruta
En routes/web.php, añade:
use App\Http\Controllers\TareaController;
Route::get('/tareas', [TareaController::class, 'index'])->name('tareas.index');3. Crear la vista
Crea el archivo resources/views/tareas/index.blade.php con el siguiente contenido:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista de Tareas</title>
<!-- Bootstrap CSS (opcional, para estilos) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">Lista de Tareas</h1>
<ul class="list-group mt-4">
@foreach ($tareas as $tarea)
<li class="list-group-item">
<strong>ID: {{ $tarea['id'] }}</strong> - {{ $tarea['nombre'] }}
</li>
@endforeach
</ul>
<!-- Mostrar enlaces de paginación -->
<div class="d-flex justify-content-center mt-4">
{{ $tareas->links() }}
</div>
<!-- Información adicional (opcional) -->
<p class="text-center mt-3">
Mostrando {{ $tareas->firstItem() }} a {{ $tareas->lastItem() }} de {{ $tareas->total() }} tareas.
</p>
</div>
<!-- Bootstrap JS (opcional) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Explicación:
Recorremos
$tareas(que es un objetoLengthAwarePaginator) y mostramos cada tarea.Usamos
$tareas->links()para generar los enlaces de paginación.También mostramos información como el rango de elementos mostrados.
4. Configurar el estilo de paginación (como en el video)
Si deseas usar Bootstrap, debes indicar a Laravel que use la plantilla de Bootstrap. En app/Providers/AppServiceProvider.php, agrega en el método boot:
use Illuminate\Pagination\Paginator;
public function boot()
{
Paginator::useBootstrapFive(); // Para Bootstrap 5
// O Paginator::useBootstrapFour() para Bootstrap 4
}Si prefieres Tailwind, puedes usar Paginator::useTailwind() (por defecto Laravel ya usa Tailwind, pero si has cambiado, puedes volver a configurarlo).
En el video, el autor menciona que Laravel tiene plantillas para Bootstrap y Tailwind, y que puedes especificar la versión.
5. Probar la paginación
Accede a la URL /tareas en tu navegador. Deberías ver las primeras 10 tareas, y en la parte inferior los enlaces de paginación (1, 2, 3, Next, Previous). Al hacer clic en "2" o "Next", se agregará el parámetro ?page=2 a la URL y mostrarás las siguientes tareas.
6. Explicación adicional basada en el video
En el video, el autor trabaja con Eloquent y usa Model::paginate(10). Aquí hemos hecho lo mismo pero con datos estáticos. Los conceptos son:
Paginación con Eloquent:
Tarea::paginate(10)devuelve un objetoLengthAwarePaginatorcon los resultados paginados.Enlaces en la vista:
$tareas->links()genera el HTML de los enlaces.Personalización: Puedes cambiar entre Bootstrap y Tailwind usando el método correspondiente en
AppServiceProvider.Rendimiento: Paginar evita cargar todos los registros, mejorando la velocidad y la experiencia del usuario.
7. Personalizar la paginación (opcional)
Puedes personalizar la vista de paginación publicando los archivos de plantilla:
php artisan vendor:publish --tag=laravel-paginationEsto creará archivos en resources/views/vendor/pagination que puedes modificar.
Conclusión
Has aprendido a implementar paginación en Laravel usando un arreglo estático, pero los mismos principios aplican a modelos Eloquent. Recuerda usar paginate() en lugar de get() para obtener datos paginados desde la base de datos.
Nota: Si prefieres usar solo el arreglo sin paginación manual, puedes convertir el arreglo a una colección y usar paginate() (pero eso requiere un LengthAwarePaginator similar). El enfoque mostrado es el más común para datos no provenientes de Eloquent.
¡Espero que este tutorial te sea útil!
Comentarios
Publicar un comentario