miércoles 25 de junio de 2008

CSS Fix: Doble margen en IE sobre elementos flotantes

Hay un bug en Internet Explorer 6 (al menos) cuando se utilizan elementos flotantes (propiedad CSS 'float') en combinación con un margen sobre el mismo lado sobre el que se flota... por ejemplo:


div.flotante {
float: left;
margin-left: 10px;
}


Si vemos este estilo aplicado en un Internet Explorer, veremos que el margen a la izquierda se duplica debido a un error de interpretación del navegador.
Misteriosamente, la solución a este problema, es agregarle la propiedad 'display' con el valor 'inline' a ese selector CSS para que no duplique el margen, entonces nuestra clase CSS nos quedaría de la siguiente manera:


div.flotante {
float: left;
margin-left: 10px;
display: inline;
}


Y ahora si, veremos que tenemos el mismo margen en Internet Explorer como en cualquier otro browser.

Espero que sirva, estuve bastantes días buscando la solución a esto.

jueves 12 de junio de 2008

Paginador simple para Zend_Db_table

Por lo que vi hay algunos acercamientos para desarrollar un paginador para Zend Framework... pero todavía falta un tiempo para que lo incluyan en la librería, asi que por el momento, tuve que desarrollar uno, que si bien es muy simple, hace el trabajo que necesito:



class Paginator {
protected $_table; // Zend_Db_Table object to paginate
protected $_ipp; // Items per page.
protected $_filter; // Filter WHERE string.
protected $_order; // ORDER BY...
protected $_numPages;


/**
* __construct()
* Inicializa el paginador.
*
* @param (Zend_Db_Table) table El objeto Table que se quiere paginar.
* @param (int) ipp Items per page.
* @param (string) order ORDER BY SQL string.
* @param (string) filter WHERE string.
*/
public function __construct($table, $ipp, $order = null, $filter = null) {
$this->_table = $table;
$this->_ipp = $ipp;
$this->_filter = $filter;
$this->_order = $order;

$this->_numPages = $this->countPages();
}


/**
* countPages()
* Calcula la cantidad total de paginas.
*
* @return (int) Cantidad de paginas.
*/
public function countPages() {
$select = $this->_table->select();
$select->from($this->_table, array('COUNT(*) AS count'));

if(!is_null($this->_filter)) {
$select->where($this->_filter);
}

$row = $this->_table->fetchRow($select);

return ceil($row->count / $this->_ipp);
}


/**
* getPage()
* Obtiene los registros correspondiente a la pagina solicitada.
*
* @param (int) Numero de la pagina que se quiere obtener.
*
* @return (Zend_Db_Table_Rowset) Registros correspondientes.
*/
public function getPage($numPage) {
$select = $this->_table->select();
if(!is_null($this->_filter)) {
$select->where($this->_filter);
}

if(!is_null($this->_order)) {
$select->order($this->_order);
}

$skip = $this->_ipp * ($numPage - 1);
$select->limit($this->_ipp, $skip);

$rows = $this->_table->fetchAll($select);

return $rows;
}


/**
* getNumPages()
* Getter for _numPages.
*
* @return (int) _numPages
*/
public function getNumPages() {
return $this->_numPages;
}
}



Bien, ese es el codigo de mi clase paginadora. Basicamente la incializamos en el constructor con algunos datos y luego utilizamos sus metodos de la siguiente manera:

En la accion del controlador:


$page = $this->_getParam('page', '1');

$order = new Order();
$paginator = new Paginator($order, 20, "orders.id_order DESC", "pending = 1");
$orders = $paginator->getPage($page);

$this->view->thisPage = $page;
$this->view->paginator = $paginator;
$this->view->orders = $orders;


Y en la vista, mostramos las paginas como links navegables:



for($i = 1; $i <= $this->paginator->getNumPages(); $i++) {
?>
<a href='/index/page/<?php echo $i; ?>'><?php echo $i; ?></a
> <?php
}



Y eso es todo... estamos paginando de forma simple, pero paginando al fin. Creo que se puede extender bastante el codigo para lograr mayor funcionalidad, o puede servir asi como está, como en este caso, como un ejemplo didáctico.

jueves 5 de junio de 2008

Photo Explorer, galeria de imagenes con Zend Framework

Hoy les dejo una pequeña aplicación basada en Zend Framework llamada Photo Explorer, que actua como un explorador de imagenes en nuestro browser, navegando y mostrando las imagenes que pongamos en el directorio de la aplicación.

La instalación es simple, solo debemos descomprimir los archivos y directorios dentro del document root de nuestro apache (o cualquier web server que usen) y editar algunas simples configuraciones...
En el archivo /config.php nos encontramos con la declaración de 4 constantes:

define('WEB_PATH', '/photos');
define('SYS_PATH', '/var/www/photos/app');
define('ZF_PATH', '/var/www/photos/library');

define('PHOTOS_PATH', '/var/www/photos/photos');

'WEB_PATH' contiene la ruta desde el document root de nuestro servidor hacia nuestra aplicación. En el ejemplo está seteada como '/photos', eso queire decir que mi aplicación se encuentra instalada en 'http://midominio.com/photos'

'SYS_PATH' contiene la ruta del filesystem del servidor hacia mi aplicación, es decir, en que lugar del disco rígido se encuentra instalada.

'ZF_PATH' es la ruta hacia el Zend Framework, en el ejemplo apunta a la carpeta 'library' de la aplicación que contiene una copia de la versión 1.5.2 del framework.

'PHOTOS_PATH' es el path del directorio que contiene la imágenes que queremos publicar en nuestra aplicación.


Por último, debemos configurar phpThumb para que reconozca las rutas hacia las imagenes que queremos mostrar.
En el archivo /phpThumb/phpThumb.config.php editamos el siguiente valor con el que corresponda:


$PHPTHUMB_CONFIG['document_root'] = '/var/www/photos/photos';

Y listo, ya debería estar funcionando la aplicación, es bastante simple, solo hay un IndexController con 2 metodos y la mayor parte de la funcionalidad esta en la vista, pero sirve mucho a modo de ejemplo. Disfruten.

Les dejo aca el link para descargar la aplicación.

Fail Blog

fail-owned-pwned-pictures
more funny fail pictures at FAIL Blog