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.

CSS: Maquetado y pie

A pedido de un colega va este requete-mini-tuto de como hacer que el DIV de pie de página quede en donde debe (al fondo del contenedor).

Supongamos una estructura semántica como la siguiente:

<body>
<div id=»contenedor»>
<div id=»encabezado»></div>
<div id=»contenido»>Contenido de la página</div>
<div id=»pie»>Copyleft 2009</div>
</div>
</body>

Bueno, los estilos para cada parte quedarían así:

html, body {
margin: 0;
padding: 0;
height: 100%;
overflow:hidden;
}
#contenedor {
width: 100%;
height: 100%;
background: #DDD;
position: relative;
}
#encabezado {
width: 100%;
background: #CCC;
position: absolute;
top:0;
height:130px;
}
#contenido {
width: 100%;
overflow: auto;
position: absolute;
top: 130px;
bottom: 40px;
}
#pie {
width: 100%;
background: #CCC;
position: absolute;
bottom: 0;
height: 40px;
}

115 Efectos para Gimp

Fx Foundry es un paquete de efectos listos para descargar y usar en Gimp 2.6

Su instalación es muy simple:   bajamos el pack,  lo descomprimimos y copiamos todos los archivos .SCM a nuestra carpeta
/home/diego/.gimp-2.6/scripts
( donde dice ‘diego’ va tu usuario ) lo aclaro por las dudas.
Luego, abrimos GIMP y en el menú vamos a Filters » Script-Fu » Refresh Scripts y listo, se crea una nueva opción en el menu desde donde podemos aplicar todos los nuevos efectos.
Algunos ejemplos:
115_original115_cromo115_old_foto

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; ?>

CSS: centrar un DIV

Con esta técnica podremos centrar un DIV de tamaño fijo tanto vertical como horizontalmente, y que se vea bien como mínimo en Firefox e IE7.

#div_a_centrar {
position: absolute;
left: 50%;
top: 50%;
height: 200px;
margin-top: -100px; // la mitad del height
width: 300px;
margin-left: -150px; // la mitad del width
}
Para entender mejor como funciona esto, podemos ver en el siguiente
cuadro explicativo:
css_center

Manuales TheGimp & Inkscape

A la hora de diseñar tenemos unas herramientas muy buenas que, sabiendo usarlas, tienen mucho poder para dar:  The Gimp e Inkscape.
Para poder dominarlas y realizar trabajos profesionales, nos hacen falta unos cuantos manuales, desde la lista Ubuntu-AR me llegó un link a  el blog de JesusDa, donde encontré una gran cantidad de material al respecto, todo liberado bajo licencias CC.
gimp24_smallbook-inkscape-logo-a-logo_small
Hay muchos otros manuales que te pueden ser de gran utilidad. Todo sobre software libre: edición de video, diseño web, gnu/linux, diseño gráfico, etc.