Symfony: Paginación con sfPropelPager

Hola, luego de casi 3 días de lectura extrema e intentos fallidos, logré dominar
la técnica de paginar elementos de un sitio mediante sfPropelPager.
En el controlador tenemos la siguiente acción:

public function executeMostrar()    {
//Defino un paginador para la clase ‘Mensaje’ . Quiero 10 resultados por página.
$pager = new sfPropelPager(‘Mensaje’, 10);
//Defino ‘criteria’, en este caso traigo TIPO=’informes’ y ordenados
de mayor a menor por ID

$c = new Criteria();
$c->add(MensajePeer::TIPO, ‘informe’, Criteria::LIKE);
$c->addDescendingOrderByColumn(MensajePeer::ID);
$pager->setCriteria($c);
//Seteo la primera página a uno
$pager->setPage($this->getRequestParameter(‘page’, 1));
$pager->init();
// Preparo la información para usarla en la vista.
$this->pager = $pager;
}

Luego, en la vista debo reemplazar en el «foreach» con el que venía listando sin paginar,  la variable que traía los datos desde el controlador por  el nuevo paginador, de esta manera:

<?php foreach( $pager->getResults() as $elemento): ?>
<?php  echo «El nombre de este elemento es:».$elemento->getNombre(); ?>
<?php endforeach; ?>

Para mostrar los números y las flechas de la paginación, usamos este código:

<?php if ($pager->haveToPaginate()): ?>
<?php echo link_to(‘&laquo;’, ‘log/mostrar?page=’.$pager->getFirstPage()) ?>
<?php echo link_to(‘&lt;’, ‘log/mostrar?page=’.$pager->getPreviousPage()) ?>
<?php $links = $pager->getLinks();
foreach ($links as $page): ?>
<?php echo ($page == $pager->getPage()) ? $page : link_to($page, ‘log/mostrar?page=’.$page) ?>
<?php if ($page != $pager->getCurrentMaxLink()): ?> – <?php endif ?>
<?php endforeach ?>
<?php echo link_to(‘&gt;’, ‘log/mostrar?page=’.$pager->getNextPage()) ?>
<?php echo link_to(‘&raquo;’, ‘log/mostrar?page=’.$pager->getLastPage()) ?>
<?php endif ?>

No te olvides de reemplazar ‘Módulo/acción’ (en el ejemplo log/mostrar) con tu módulo y tu acción.
Queda muy bien mostrar un encabezado con la información total del listado, así:

<?php echo $pager->getNbResults().» Elementos encontrados. Mostrando resultados desde «.$pager->getFirstIndice().» hasta «.$pager->getLastIndice(); ?>

Costó mucho pero quedó funcionando a la perfección.
saludos.

4 thoughts on “Symfony: Paginación con sfPropelPager”

  1. Buenisima tu explicacion por fin pude hacer la paginacion.
    La explicacion del jobeet no me quedaba muy clara

    Saludos

  2. Buenas!! Funcionar funciona perfectamente, pero y tengo una duda.
    Si por ejemplo tengo 10.000 articulos, quiero que me salgan 10 articulos por pagina, como haces para que no te ponga los numeros del 1 al 1000?
    que no aparezca 1..2..3..4..5..6….etc ..999…1000 ??
    Que aparezcan por ejemplo 10 numeros, los 5 anteriores a donde estas y los 5 siguientes, en caso de que haya anteriores o siguientes…????
    Gracias!!!!!!!!!

  3. Hola Xavi, creo que para eso que me comentás habría que investigar la documentación de sfPropelPager (si es que existe, no lo sé) y ver si trae alguna función que lo permita, y sino modificar a mano las funciones. Lamento no poder ayudarte más. Saludos! Diego.

Deja un comentario