Pasos «básicos» para instalar KnpPaginatorBundle en Symfony2 (en mi caso con la versión 2.3.9 de Symfony):
1. Añadimos la siguiente línea a nuestro archivo: /composer.json:
{ "require": { "knplabs/knp-paginator-bundle": "~2.4" } }
2. Instalamos el bundle actualizando composer, ejecutando el comando:
composer update
3. Registramos el bundle en el archivo: app/AppKernel.php:
public function registerBundles() { $bundles = array( // ... new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(), // ... ); }
4. Añadimos las opciones de configuración del paginador en el archivo: app/config/config.yml:
knp_paginator: page_range: 5 # número de páginas a mostrar default_options: page_name: page # nombre del parámetro de paginación sort_field_name: sort # nombre del parámetro para ordenar los registros sort_direction_name: direction # nombre del parámetro para ordenar la dirección de los registros distinct: true # incluir resultados diferentes, útil en consultas con GROUP BY template: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # plantilla utilizada en la paginación sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # plantilla utilizada en la paginación para ordenar los resultados
Y listo!!!. Ya solo faltaría hacer la llamada en el «controlador y la vista» de la plantilla.
Un ejemplo:
// Acme\MainBundle\Controller\ArticleController.php // Aquí por tu query $mi_query = $em->getRepository('AcmeMainBundle:Articulos')->getArticulos(); // Añadimos el paginador (En este caso el parámetro "1" es la página actual, y parámetro "10" es el número de páginas a mostrar) $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate( $mi_query, $this->get('request')->query->get('page', 1),10 ); // Añadimos el parámetro a la plantilla return $this->render('AcmeMainBundle:Article:listado.html.twig', array('pagination' => $pagination));
<ul> {% for article in pagination %} <li> {{ article.id }} - {{ article.titulo }} </li> {% endfor %} </ul> <div class="paginacion"> {{ knp_pagination_render(pagination) }} </div>
(*) Más info en la página github del bundle
Agradezco tu comentario 🤘