$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';
/**
*/
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:
* @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.
$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);
+ }
+ }
+
}
?>