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.

Symfony: programando PHP

Bueno, este post lo voy a ir editando a medida que tenga más cosas útiles de Symfony para compartir. Para los que no lo conocen Symfony es un framework para programar aplicaciones web en PHP5 usando OOP (programación orientada a objetos).

# Mostrar mensajes al usuario (por ejemplo, en un formulario avisarle que los datos ingresados no son correctos)
en la acción:
// cargo un mensaje de error y
$this->getUser()->setFlash(‘error’, sprintf(‘Los datos no son v&aacute;lidos.’));
// vuelvo a la pantalla de login.
$this->forward(‘usuarios’, ‘MostrarForm’);

en la vista:
<!— Muestro posible mensaje de error –>
<?php if ($sf_user->hasFlash(‘error’)): ?>
<span class=»flash_error»><?php echo $sf_user->getFlash(‘error’) ?></span>
<?php endif; ?>