]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/HTML/TablaDB.php
- Se agregan metodos para dibujar resultados de bases de datos facilmente.
[mecon/meconlib.git] / lib / MECON / HTML / TablaDB.php
index 9a0d15ed86f0ee1e3a862b9702461b24b27c683e..ba5c00f9e8b9524e6fc2a8f60c58638c2f9cf7ef 100644 (file)
@@ -24,7 +24,10 @@ Autor:  Martin Marrese <mmarre@mecon.gov.ar>
 $Id$
 -----------------------------------------------------------------------------*/
 
 $Id$
 -----------------------------------------------------------------------------*/
 
+require_once 'DB.php';
 require_once 'MECON/DB/Pager.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';
 
 /**
 require_once 'MECON/HTML/Tabla.php';
 
 /**
@@ -33,6 +36,32 @@ require_once 'MECON/HTML/Tabla.php';
  */
 class MECON_HTML_TablaDB extends MECON_HTML_Tabla {
 
  */
 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:
     /**
      * 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.
      *
      * @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.
      */
     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->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()) {
         }
         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;
     }
 
         }
         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);
+        }
+    }
+
 }
 
 ?>
 }
 
 ?>