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(‘«’, ‘log/mostrar?page=’.$pager->getFirstPage()) ?>
<?php echo link_to(‘<’, ‘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(‘>’, ‘log/mostrar?page=’.$pager->getNextPage()) ?>
<?php echo link_to(‘»’, ‘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.
Buenisima tu explicacion por fin pude hacer la paginacion.
La explicacion del jobeet no me quedaba muy clara
Saludos
Muchas gracias me funciono perfectoo!!!! Te pasasteee!!!
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!!!!!!!!!
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.