- /**
- * 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:
- * <ul>
- * <li><tt>'anterior'</tt></li>
- * <li><tt>'siguiente'</tt></li>
- * <li><tt>'paginas'</tt></li>
- * <li><tt>'total'</tt></li>
- * <li><tt>'info'</tt></li>
- * </ul>
- * Puede pasarse uno solo como un string o varios como un
- * array. Si se pasa <tt>'todo'</tt>, se incluyen todos.
- * Si se pasa null, se incluyen <tt>'anterior'</tt>,
- * <tt>'siguiente'</tt> y <tt>'paginas'</tt>.
- * @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;
- }
-