*/
var $_desc = 'resultados';
+ /**
+ * Datos a agregar delante de cada fila que se agregue desde una base de datos.
+ * Cada elemento del array es a su vez un array cuyo primer elemento es el
+ * formato del texto a agregar (tipo printf()) y el segundo es un array con los
+ * campos de la DB a utilizar para ese formato en una fila dada.
+ */
+ var $_prependRowsData = array();
+
+ /**
+ * Datos a agregar al final de cada fila que se agregue desde una base de datos.
+ * El formato es el mismo que el de _prependRowsData.
+ */
+ var $_appendRowsData = array();
+
+ /**
+ * Prefijo a usar para las variables GET que genera la tabla.
+ */
+ var $_getVarPrefix = 'tabladb_';
+
/**
* Constructor.
* Puede recibir como parametro un string con los atributos que se
parent::MECON_HTML_Tabla($attrs, $estilo);
}
+ /**
+ * Establece el prefijo usado para las variables de GET que genera la tabla.
+ */
+ function setGetVarPrefix($prefix) {
+ $this->_getVarPrefix = $prefix;
+ }
+
+ /**
+ * Obtiene el prefijo usado para las variables de GET que genera la tabla.
+ */
+ function getGetVarPrefix() {
+ return $this->_getVarPrefix;
+ }
+
/**
* Agrega un páginador a la tabla, basado en un resultado de una base de datos.
* Ejemplo:
* GET) o un string.
* @param int $limit Parámetro usado para crear el MECON_DB_Pager.
* @param int $maxpages Parámetro usado para crear el MECON_DB_Pager.
+ * @param string $getvar Nombre de la variable GET a usar para indicar el número
+ * de página actual (se le pone el \ref setGetPrefix prefijo)
*
* @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.
*/
- function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21) {
+ function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21, $getvar = 'from') {
// Creo el pager con el resultado.
- $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages);
+ $pager = new MECON_DB_Pager($result, @$_GET[$this->_getVarPrefix.$getvar], $limit, $maxpages);
// Obtengo un link válido.
if (!$link) {
$link = @$_SERVER['PHP_SELF'];
}
// Me fijo si tiene cada uno de los elementos y los agrego.
if (in_array('anterior', $tipo) and $pager->numRows() and $pager->currentpage != 1) {
- $link->setGetVar('pager_from', $pager->prev);
+ $link->setGetVar($this->_getVarPrefix.$getvar, $pager->prev);
$this->addLink('anterior', $link);
}
if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) {
- $link->setGetVar('pager_from', $pager->next);
+ $link->setGetVar($this->_getVarPrefix.$getvar, $pager->next);
$this->addLink('siguiente', $link);
}
if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) {
- $from = @$_GET['pager_from'];
+ $from = @$_GET[$this->_getVarPrefix.$getvar];
$pags = '';
$lnk = $link->getContents();
foreach ($pager->pages as $page => $start_row) {
if ($start_row == $from) {
$pags .= $page;
} else {
- $link->setGetVar('pager_from', $start_row);
+ $link->setGetVar($this->_getVarPrefix.$getvar, $start_row);
$link->setContents($page);
$pags .= $link->toHtml();
}
function addRowsResult($result, $campos) {
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$datos = array();
+ if ($this->_prependRowsData) {
+ $datos = $this->_buildRowsData($datos, $row, $this->_prependRowsData);
+ }
foreach ($campos as $campo) {
$datos[] = $row[$campo];
}
+ if ($this->_appendRowsData) {
+ $datos = $this->_buildRowsData($datos, $row, $this->_appendRowsData);
+ }
$this->addRow($datos);
}
}
}
}
+ function addRowsData($format, $campos = array(), $lugar = 'append') {
+ if (!is_array($campos)) {
+ $campos = array($campos);
+ }
+ switch (strtolower($lugar)) {
+ case 'prepend':
+ $this->_prependRowsData[] = array($format, $campos);
+ break;
+ case 'append':
+ $this->_appendRowsData[] = array($format, $campos);
+ break;
+ default:
+ $this->raiseError('Lugar incorrecto. Lugares soportados: append, prepend.');
+ }
+ }
+
+ function _buildRowsData($datos, $row, $array) {
+ if ($array) {
+ foreach ($array as $data) {
+ list($format, $fields) = $data;
+ // Si tiene formatos y argumentos.
+ if ($fields) {
+ $args = array($format);
+ foreach ($fields as $field) {
+ if (is_array($row)) {
+ $args[] = $row[$field];
+ } else {
+ $args[] = $row->$field;
+ }
+ }
+ $datos[] = call_user_func_array('sprintf', $args);
+ // Si tiene solo formato.
+ } else {
+ #echo "TAG: $format<br>";
+ // Si es un link, traduce las variables GET.
+ if (is_a($format, 'mecon_html_link')) {
+ $vars = $format->getGetVars();
+ foreach ($vars as $var => $val) {
+ if (preg_match("/^{$this->_getVarPrefix}(.+)$/", $var, $m)
+ and ($val === null)) {
+ $format->setGetVar($var, $row[$m[1]]);
+ }
+ }
+ }
+ $datos[] = $format;
+ }
+ }
+ }
+ return $datos;
+ }
+
+ function addRowsIcon($id, $campos = array(), $link = null, $lugar = 'append') {
+ if (is_string($campos)) {
+ $campos = array($campos);
+ }
+ if (!$link) {
+ $link = @$_SERVER['PHP_SELF'];
+ }
+ if (is_string($link)) {
+ $link = new MECON_HTML_Link($link, '');
+ }
+ switch ($id) {
+ case 'modificar':
+ $img = new MECON_HTML_Image('/MECON/images/general_modificar', '(M)');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ case 'no_modificar':
+ $img = new MECON_HTML_Image('/MECON/images/general_modificar_des', '(-)');
+ $this->addRowsData($img, array(), $lugar);
+ break;
+ case 'borrar':
+ $img = new MECON_HTML_Image('/MECON/images/general_eliminar', '(B)');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ case 'no_borrar':
+ $img = new MECON_HTML_Image('/MECON/images/general_eliminar_des', '(-)');
+ $this->addRowsData($img, array(), $lugar);
+ break;
+ case 'ir':
+ $img = new MECON_HTML_Image('/MECON/images/general_ir4', '->');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ default:
+ $this->raiseError("No hay un ícono predefinido llamado '$id'.");
+ }
+ }
+
}
?>