function paginacion($cSql, $leyenda, $tamPagina = 10, $maxIndex = 10, $leyendaPaginas = "Página %s de %s", $queryString = "") { /* devuelve un array con ( n reg, n paginas, cSQL limitada, navegación ) */ $paginaActual = 0; if ($queryString) { $nTemp = strpos($queryString, "PaginaActual="); if ($nTemp > 0) { $paginaActual = (int) substr($queryString, $nTemp + 13); } } if (!$paginaActual) { $paginaActual = por_defecto(si_es_key($_REQUEST, "PaginaActual"), mRequest("PaginaActual")); if ($paginaActual == "") { $paginaActual = 1; } } $rsTemp = mysql_query($cSql); $totalReg = mysql_num_rows($rsTemp); $cNavega = ""; if ($totalReg == 0) { // no hay páginas $totalPaginas = 0; $paginaActual = 0; } elseif ($totalReg <= $tamPagina) { // solo hay una página $totalPaginas = 1; $paginaActual = 1; } else { // hay más de una página $totalPaginas = ceil($totalReg / $tamPagina); if ($paginaActual > $totalPaginas) { $paginaActual = $totalPaginas; } // calculamos las leyendas si hay if ($leyenda != "") { $npag = 1; $aCampos = explode(",", $leyenda); while ($npag <= $totalPaginas && ($aTemp = mysql_fetch_array($rsTemp))) { $cTemp = ""; foreach ($aCampos as $tCampo) { $cTemp .= $aTemp[trim($tCampo)] . " "; } $aLeyendas[$npag - 1] .= " - {$cTemp}"; $aLeyendas[$npag] = $cTemp; /* TODO mirar error */ @mysql_data_seek($rsTemp, $npag * $tamPagina); $npag++; } // falta el ultimo mysql_data_seek($rsTemp, $totalReg - 1); $aTemp = mysql_fetch_array($rsTemp, MYSQL_ASSOC); $cTemp = ""; foreach ($aCampos as $tCampo) { $cTemp .= $aTemp[trim($tCampo)] . " "; } $aLeyendas[$totalPaginas] .= " - {$cTemp}"; } // cambiamos la SQL. if (strstr(strtoupper($cSql), " LIMIT ") === false) { $cSql .= " LIMIT " . max(0, ($paginaActual - 1) * $tamPagina) . ",{$tamPagina}"; } // Construir barra de navegacion $webBase = _paginacion_base($queryString); if ($totalPaginas <= $maxIndex) { // todas las páginas caben. for ($nCont = 1; $nCont <= $totalPaginas; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}'" : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp} >{$nCont}</a>\n"; } } else { // construir barra limitada if ($paginaActual > $totalPaginas - $maxIndex) { $nDesde = $totalPaginas - $maxIndex; $nHasta = $totalPaginas; } else { $nDesde = floor($paginaActual / $maxIndex) * $maxIndex + 1; $nHasta = $nDesde + $maxIndex - 1; } $nSiguiente = min($totalPaginas, $nDesde == 1 ? $maxIndex : $nDesde + $maxIndex); $nAnterior = max(1, $nDesde - $maxIndex); // boton de ir al principio (siempre 1) if ($nDesde > 1) { $temp = $leyenda ? " title='{$aLeyendas[1]}' " : ""; $cNavega .= "<a class='paginacion_bottom' href='{$webBase}PaginaActual=1'{$temp};><<</a>"; } // boton de ir al anterior if ($nDesde != 1) { /* boton anterior */ $temp = $leyenda ? " title='{$aLeyendas[$nAnterior]}' " : ""; $cNavega .= " <a class='paginacion_anterior' href='{$webBase}PaginaActual={$nAnterior}'{$temp}><</a>"; } // poner las paginas $cNavega .= "<span class='paginacion_paginas'>\n"; for ($nCont = $nDesde; $nCont <= $nHasta; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}' " : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp}>{$nCont}</a>\n"; } $cNavega .= "</span>\n"; // botón de siguiente if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$nSiguiente]}' " : ""; $cNavega .= " <a class='paginacion_siguiente' href='{$webBase}PaginaActual={$nSiguiente}' {$temp}'>></a>\n"; } // botón de ultimo if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$ntotalPaginas]}' " : ""; $cNavega .= " <a class='paginacion_top' href='{$webBase}PaginaActual={$totalPaginas}' {$temp}>>></a>\n"; } } } if ($totalPaginas <= 0) { $cPagina = " "; } else { // se genera la paginación. Ej: 5 de 6 $cPagina = sprintf($leyendaPaginas, $paginaActual, $totalPaginas) . " |" . $cNavega; } $aTemp = array($totalReg, $totalPaginas, $cSql, $cPagina); return $aTemp; }
function paginacion($cSql, $leyenda, $tamPagina = 10, $maxIndex = 10, $leyendaPaginas = "Página %s de %s") { /* devuelve un array con ( n reg, n paginas, cSQL limitada, navegación ) */ $paginaActual = mRequest("PaginaActual"); if ($paginaActual == "") { $paginaActual = 1; } $rsTemp = mysql_query($cSql); $totalReg = mysql_num_rows($rsTemp); $cNavega = ""; if ($totalReg == 0) { // no hay páginas $totalPaginas = 0; $paginaActual = 0; } elseif ($totalReg <= $tamPagina) { // solo hay una página $totalPaginas = 1; $paginaActual = 1; } else { // hay mas de una página $totalPaginas = ceil($totalReg / $tamPagina); if ($paginaActual > $totalPaginas) { $paginaActual = $totalPaginas; } // calculamos las leyendas si hay if ($leyenda != "") { $npag = 1; $aCampos = explode(",", $leyenda); while ($npag < $totalPaginas && ($aTemp = mysql_fetch_array($rsTemp))) { $cTemp = ""; foreach ($aCampos as $tCampo) { $cTemp .= $aTemp[trim($tCampo)] . " "; } $aLeyendas[$npag - 1] .= " - {$cTemp}"; $aLeyendas[$npag] = $cTemp; mysql_data_seek($rsTemp, $npag * $tamPagina); $npag++; } } if (strstr(strtoupper($cSql), " LIMIT ") === false) { $cSql .= " LIMIT " . max(0, ($paginaActual - 1) * $tamPagina) . ",{$tamPagina}"; } /* Construir barra de navegacion */ $webBase = _paginacion_base(); if ($totalPaginas <= $maxIndex) { for ($nCont = 1; $nCont <= $totalPaginas; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}'" : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp} >{$nCont}</a>"; } } else { /*construir barra limitada */ $nDesde = max(1, floor($paginaActual / $maxIndex) * $maxIndex); $nHasta = min($totalPaginas, $nDesde + $maxIndex - ($nDesde == 1 ? 1 : 0)); $nSiguiente = min($totalPaginas, $nDesde == 1 ? $maxIndex : $nDesde + $maxIndex); $nAnterior = max(1, $nDesde - $maxIndex); // boton de ir al principio (siempre 1) if ($nDesde > 1) { $temp = $leyenda ? " title='{$aLeyendas[1]}' " : ""; $cNavega .= "<a href='{$webBase}PaginaActual=1'{$temp};><<</a>|"; } // boton de ir al anterior if ($nDesde != 1) { /* boton anterior */ $temp = $leyenda ? " title='{$aLeyendas[$nAnterior]}' " : ""; $cNavega .= "<a href='{$webBase}PaginaActual={$nAnterior}'{$temp}><</a>| "; } // poner las paginas for ($nCont = $nDesde; $nCont < $nHasta; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}' " : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp}>{$nCont}</a> "; } // botón de siguiente if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$nSiguiente]}' " : ""; $cNavega .= " |<a href='{$webBase}PaginaActual={$nSiguiente}' {$temp}'>></a>"; } // botón de ultimo if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$ntotalPaginas]}' " : ""; $cNavega .= "|<a href='{$webBase}PaginaActual={$totalPaginas}' {$temp}>>></a>|"; } } } if ($totalPaginas <= 1) { $cPagina = " "; } else { $cPagina = sprintf($leyendaPaginas, $paginaActual, $totalPaginas) . " |" . $cNavega; } $aTemp = array($totalReg, $totalPaginas, $cSql, $cPagina); return $aTemp; }