X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/b6ce5f0536503a2dc458c2b7a857dea6b324d97e..eea6ba8766b28204a70df8420b77ccc029a827e5:/lib/MECON/HTML/TablaDB.php diff --git a/lib/MECON/HTML/TablaDB.php b/lib/MECON/HTML/TablaDB.php index 9a0d15e..ba5c00f 100644 --- a/lib/MECON/HTML/TablaDB.php +++ b/lib/MECON/HTML/TablaDB.php @@ -24,7 +24,10 @@ Autor: Martin Marrese $Id$ -----------------------------------------------------------------------------*/ +require_once 'DB.php'; require_once 'MECON/DB/Pager.php'; +require_once 'MECON/HTML/Error.php'; +require_once 'MECON/HTML/Link.php'; require_once 'MECON/HTML/Tabla.php'; /** @@ -33,6 +36,32 @@ require_once 'MECON/HTML/Tabla.php'; */ class MECON_HTML_TablaDB extends MECON_HTML_Tabla { + /** + * Descripción de los elementos listados. + * Se utiliza en mensajes del paginador y otros mensajes. + */ + var $_desc = 'resultados'; + + /** + * Constructor. + * Puede recibir como parametro un string con los atributos que se + * quieren dar a la tabla en cuestion. Estos atributos estan + * seteados por default segun el archivo de configuracion. + * Ademas puede recibir la indicacion de algun estilo en particular. + * + * @param string $desc Descripción de los elementos listados. + * @param mixed $attrs Atributos diferentes a los estandares para la tabla + * @param string $estilo Tipo de tabla + * + * @access public + */ + function MECON_HTML_TablaDB($desc = null, $attrs = null, $estilo = 'comun') { + if ($desc) { + $this->_desc = $desc; + } + parent::MECON_HTML_Tabla($attrs, $estilo); + } + /** * Agrega un páginador a la tabla, basado en un resultado de una base de datos. * Ejemplo: @@ -77,7 +106,7 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla { * @return MECON_DB_Pager Pager que se puede usar para realizar los fetch de * los resultados de la página actual. * - * @see MECON_DB_Pager + * @see MECON_DB_Pager. */ function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21) { // Creo el pager con el resultado. @@ -130,15 +159,92 @@ class MECON_HTML_TablaDB extends MECON_HTML_Tabla { $this->updatePie($pags, 'centro'); } if (in_array('total', $tipo) and $pager->numRows()) { - $this->updateCabecera('Se encontraron ' . $pager->numrows . ' resultados.', 'izquierda'); + $this->updateCabecera("Se encontraron {$pager->numrows} {$this->_desc}.", 'izquierda'); } if (in_array('info', $tipo) and $pager->numRows()) { - $this->updateCabecera('Página ' . $pager->currentpage . ' de ' . $pager->numpages - . ' - ' . $pager->limit . ' resultados por página.', 'derecha'); + $this->updateCabecera("'Página {$pager->currentpage} de {$pager->numpages} - " + . "{$pager->limit} {$this->_desc} por página.", 'derecha'); } return $pager; } + /** + * Agrega filas desde el resultado de una consulta a una base de datos. + * Si no hay resultados, muestra un mensaje. Dependiendo de si es se pasa + * un objeto a usar o no, llama a addRowsObject() o addRowsResult() + * respectivamente. + * Ejemplo: + * @code + * $tabla = new MECON_HTML_TablaDB('agentes', array('width' => '100%')); + * $tabla->addRow(array('Nombre', 'Apellido')); + * // Supongo que $result tiene un DB_Result. + * $tabla->addRows($result, array('nombre', 'cuil')); + * $tabla->display(); + * @endcode + * + * @param DB_Result $result Resultados de una consulta. + * @param array $campos Propiedades del objeto a mostrar. + * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un + * string con el nombre de la clase. + */ + function addRows($result, $campos, $obj = null) { + if ($result->numRows()) { + if ($obj) { + $this->addRowsObject($result, $campos, $obj); + } else { + $this->addRowsResult($result, $campos, $obj); + } + } else { + $id = $this->addRow(array(new MECON_HTML_Error("No se encontraron {$this->_desc}."))); + $this->updateCellAttributes($id, 0, array('colspan' => count($campos))); + } + } + + /** + * Agrega filas usando un resultado. + * + * @param DB_Result $result Resultados de una consulta. + * @param array $campos Campos de la base de datos a mostrar. + */ + function addRowsResult($result, $campos) { + while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { + $datos = array(); + foreach ($campos as $campo) { + $datos[] = $row[$campo]; + } + $this->addRow($datos); + } + } + + /** + * Agrega filas usando un objeto. + * El objeto debe tener un método llamado cargar que acepte como primer (y + * único obligatorio) parámetro un DB_Result para cargar sus datos desde una + * base de datos. + * + * @param DB_Result $result Resultados de una consulta. + * @param array $campos Propiedades del objeto a mostrar. + * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un + * string con el nombre de la clase. + * + * @see La interfaz MECON_DBO que tiene el método MECON_DBO::cargar(). + */ + function addRowsObject($result, $campos, $obj) { + if (is_string($obj)) { + $obj = new $obj; + } + if (!method_exists($obj, 'cargar')) { + $this->raiseError('La clase ' . get_class($obj) . ' no tiene un metodo cargar().'); + } + while ($obj->cargar($result)) { + $datos = array(); + foreach ($campos as $campo) { + $datos[] = $obj->$campo; + } + $this->addRow($datos); + } + } + } ?>