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 🤘