CakePHP - Paginación

Si queremos mostrar un conjunto de datos enorme, podemos usar la paginación y esta característica está disponible con cake php 4, que es muy fácil de usar.

Tenemos una tabla titulada "artículos" con los siguientes datos:

Usemos la paginación para mostrar los datos en forma de páginas, en lugar de mostrarlos todos juntos.

Ejemplo

Realice cambios en el archivo config / routes.php como se muestra en el siguiente programa.

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('posts',['controller'=>'Posts','action'=>'index']);
   $builder->fallbacks();
});

Crear un PostsController.php archivar en src/Controller/PostsController.php.Copie el siguiente código en el archivo del controlador. Ignorar, si ya está creado.

src / Controller / PostsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class PostsController extends AppController {
      public function index(){
         $this->loadModel('articles');
         $articles = $this->articles->find('all')->order(['articles.id ASC']);
         $this->set('articles', $this->paginate($articles, ['limit'=> '3']));
      }
   }
?>

Los datos de la tabla de artículos se obtienen usando -

$this->loadModel('articles');
$articles = $this->articles->find('all')->order(['articles.id ASC']);

Para aplicar la paginación ya mostraríamos los datos con 3 por registros y lo mismo se hace de la siguiente manera -

$this->set('articles', $this->paginate($articles, ['limit'=> '3']));

Esto es suficiente para activar la paginación en las tablas de artículos .

Crea un directorio Posts a src/Template y bajo ese directorio crea un Viewarchivo llamado index.php. Copie el siguiente código en ese archivo.

src / Template / Posts / index.php

<div>
<?php foreach ($articles as $key=>$article) {?>
<a href="#">
   <div>
   <p><?= $article->title ?> </p>
   <p><?= $article->details ?></p>
   </div>
</a>
<br/>
<?php
}
?>
<ul class="pagination">
<?= $this->Paginator->prev("<<") ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(">>") ?>
</ul>
</div>

La paginación de la lista de páginas se realiza de la siguiente manera:

<ul class="pagination">
<?= $this->Paginator->prev("<<") ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(">>") ?>
</ul>

Ejecute el ejemplo anterior visitando la siguiente URL:

http: // localhost / cakephp4 / posts

Salida

Cuando ejecute el código, verá el siguiente resultado:

Haga clic en los números a continuación para pasar a la página siguiente o utilice el botón siguiente o anterior.

For example

Verá que page = 2 se adjunta a la URL de la página en el navegador.