Paginación en PHP fácil y rápida

Formulario actualizar foto

Con este tutorial mostraremos como realizar la paginación en PHP de un listado de usuarios, usando nuestro framework favorito KumbiaPHP. Utilizaremos como base el proyecto anterior, donde mostramos como subir una imagen y asignarla a un usuario, y cambiaremos el listado normal por un listado paginado.

En el controlador

Lo primero es mencionar que el ActiveRecord cuenta con un paginador muy bueno(Ver sección en el manual: Paginando en ActiveRecord), que nos permitirá con una sola línea de código implementar la paginación en php. Vamos al controlador de usuarios y añadimos la función page(…):

Archivo: app/controllers/user_controller.php


public function page(int $page = 1)//validación 'int' con php7
{        
    $this->page = (new User)->paginate("page: $page", 'per_page: 7');
}

El parametro $page tiene un valor por defecto, así que si no le pasamos ningun valor será igual a 1. En el llamado a la función paginate() el primer parámetro es page, con el cual le indicamos el número de página que deseamos mostrar. El segundo parámetro es per_page, con el cual le indicamos el número de elementos a mostrar por página.

La vista

Creamos un nuevo archivo llamado page.html es una vista similar a index.phtml, con la diferencia que para obtener el arreglo de elementos, ojo esto es muy importante, se accede al atributo items del objeto $page. La otra diferencia es que se hace llamado a un partial el cual nos mostrará el paginador con el número de página actual y los números de páginas disponibles. Si, este partial nos ahorra un montón de trabajo ya que en él está toda la lógica de visualización.

Archivo: app/views/user/page.phtml

<h1>Lista de usuarios</h1>
<?= Html::linkAction('create', 'Crear', 'class="button"') ?> 
<?php View::content() ?>
<?php if (count($page->items) > 0) { ?>
    <table class="u-fu$pagell-width">
        <thead>
            <tr>            
                <th>Nombre</th>
                <th>Edad</th>
                <th>Correo</th>
                <th>Foto</th>
                <th>Acciones</th>
            </tr>
        </thead>
        <tbody> 
            <?php foreach ($page->items as $item) { ?> 
                <tr>
                    <td><?= $item->name ?></td>
                    <td><?= $item->age ?></td>
                    <td><?= $item->email ?></td>
                    <td><?= $item->photo ?></td>
                    <td><?= Html::linkAction("edit/$item->id", 'Editar') ?> | <?= Html::linkAction("update_photo/$item->id", 'Actualizar foto') ?></td>
                </tr> 
            <?php } ?>        
        </tbody>
    </table>
<?php } else { ?>
    <h2>No hay ningún registro</h2>
<?php } ?>

<?php View::partial('paginators/classic', false, array('page' => $page)); ?>

Existen otros partials que sirven de paginadores, también puedes crear los tuyos para que se adapten a tu diseño.

Así se ve nuestra paginación en PHP

Lista de usuarios paginados
Lista de usuarios paginados

Descargar código completo

Como siempre, el código completo está disponible para todos en el siguiente repositorio en Github listo para usar con Docker: https://github.com/henrystivens/paginate-php

Si has llegado hasta aquí quisiera que me ayudaras con tus comentarios para saber cual es el siguiente paso con este proyecto, por ejemplo: ¿Cómo hago para que al subir la imagen me cree una miniatura de la misma? ¿Cómo le cambio los textos por iconos a las acciones?


Deja un comentario

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

© Kumbia Team