------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/DB/Pager.php'; require_once 'MECON/HTML/Tabla.php'; /** * Libreria para le manejo de las tablas de los sistemas de intranet. * */ class MECON_HTML_TablaDB extends MECON_HTML_Tabla { /** * Agrega un páginador a la tabla, basado en un resultado de una base de datos. * Ejemplo: * @code * $tabla = new MECON_HTML_Tabla(); * $result = $db->query('SELECT * FROM tabla'); * if (DB::isError($result)) { * die('Error'); * } * $pager = $tabla->addPager($result); * $tabla->addRow(array('Nombre', 'Apellido'), 'cabecera'); * if ($pager->numRows()) { * while ($row = $pager->fetchRow(DB_FETCHMODE_ASSOC)) { * $tabla->addRow(array($row['nombre'], $row['apellido'])); * } * } else { * $tabla->addRow(array(new MECON_HTML_Error('No se encontraron agentes.')), * array('colspan' => 2)); * } * $tabla->display(); * @endcode * * @param DB_Result $result Resultado de una consulta de base de datos. * @param mixed $tipo Tipo de link(s) a agregar. Puede ser: * * Puede pasarse uno solo como un string o varios como un * array. Si se pasa 'todo', se incluyen todos. * Si se pasa null, se incluyen 'anterior', * 'siguiente' y 'paginas'. * @param mixed $link Dirección a la que apuntan los links generados. Puede * ser un MECON_HTML_Link (para poder pasar variables por * 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. * * @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) { // Creo el pager con el resultado. $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages); // Obtengo un link válido. if (!$link) { $link = @$_SERVER['PHP_SELF']; } if (is_string($link)) { $link = new MECON_HTML_Link($link, ''); } // Si es el tipo por defecto pone paginador nada más. if (!$tipo) { $tipo = array('anterior', 'paginas', 'siguiente'); } // Convierte tipo a array. if (!is_array($tipo)) { $tipo = array($tipo); } // Si se quiere mostrar todas las decoraciones del paginador. if (in_array('todo', $tipo)) { $tipo = array('anterior', 'paginas', 'siguiente', 'total', 'info'); } // 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); $this->addLink('anterior', $link); } if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) { $link->setGetVar('pager_from', $pager->next); $this->addLink('siguiente', $link); } if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) { $from = @$_GET['pager_from']; $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->setContents($page); $pags .= $link->toHtml(); } if ($page != $pager->lastpage) { $pags .= ' | '; } } $link->setContents($lnk); $this->updatePie($pags, 'centro'); } if (in_array('total', $tipo) and $pager->numRows()) { $this->updateCabecera('Se encontraron ' . $pager->numrows . ' resultados.', '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'); } return $pager; } } ?>