Bueno quizás sea tarde pero leí tu pregunta y tengo una respuesta, yo uso tu paginación en varias páginas aunque modifique algunas cosas, te pongo tu versión del código y luego el mio:
Primero las funciones:
Código PHP :
public function paginar($actual, $total, $por_pagina, $enlace, $maxpags=0) {
$total_paginas = ceil($total/$por_pagina);
$anterior = $actual - 1;
$posterior = $actual + 1;
$minimo = $maxpags ? max(1, $actual-ceil($maxpags/2)): 1;
$maximo = $maxpags ? min($total_paginas, $actual+floor($maxpags/2)): $total_paginas;
if ($actual>1){
$texto = "<a href=\"$enlace$anterior$condicion\" class=\"numeros\">«</a> ";
}else{
$texto = "<span class=\"activo\"><b>«</b></span>";
}
if ($minimo!=1){
$texto.= "... ";
}
for ($i=$minimo; $i<$actual; $i++){
$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";
}
$texto .= "<span class=\"activo\"><b>$actual</b></span>";
for ($i=$actual+1; $i<=$maximo; $i++){
$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";
}
if ($maximo!=$total_paginas){
$texto.= "... ";
}
if ($actual<$total_paginas){
$texto .= "<a href=\"$enlace$posterior\" class=\"numeros\">»</a>";
}else{
$texto .= "<span class=\"activo\"><b>»</b></span>";
}
return $texto;
}
public function totalpaginas($total, $por_pagina){
$total_paginas = ceil($total/$por_pagina);
return $total_paginas;
}
public function generarReporte($param="", $orden="", $reg="", $tampag=""){
$query="select rpa.idanuncio, rpa.usuario, rpa.imagenprincipal, rpa.titulo, rpa.planta, rpa.dormitorios, rpa.precio, rpz.zona, rpa.tipo, rpa.metros2, rpa.preciom2, rpa.negociable, rpva.ventaalquiler, rpn.nuevoono, rpa.destacado, rpa.resumen, rpn.idestado, rpva.idestva from realpro_anuncio rpa, realpro_estado rpn, realpro_estva rpva, realpro_zona rpz where rpa.idestado=rpn.idestado and rpa.idestva=rpva.idestva and rpa.idzona=rpz.idzona";
if($param!=""){
$query.= "and rpva.idestva='".$param."'";
}
if($orden==""){
$query.= " order by rpa.precio";
}
//if($reg!="" && $tampag!=""){
$query.=" LIMIT ".$reg.", ".$tampag;
//}
$consulta=mysql_query($query);
return $consulta;
}
public function totalFilasReporte($param=""){
$query="select count(rpa.idanuncio) from realpro_anuncio rpa, realpro_estado rpn, realpro_estva rpva, realpro_zona rpz where rpa.idestado=rpn.idestado and rpa.idestva=rpva.idestva and rpa.idzona=rpz.idzona";
if($param!=""){
$query.= "and rpva.idestva='".$param."'";
}
$consulta=mysql_query($query);
return $consulta;
}
Luego los estilos que aplique:
Código HTML :
a.numeros{
font-weight:bold;
color:#000000;
display:inline;
text-decoration:none;
background-color:#FFFFFF;
border:groove 1px #000000;
padding:2.5px;
margin-right:1px;
width:15px;
}
a.numeros:hover{
color:#FFFFFF;
background-color:#000000;
text-decoration:none;
}
.activo{
color:#0000FF;
display:inline;
text-decoration:none;
background-color:#99CCCC;
border:groove 1px #000000;
padding:2.5px;
margin-right:1px;
width:15px;
}
Finalmente el código en la página implementada (reportes.php):
Código PHP :
<?php
include "soporte.php";
if (!isset($_GET['pag'])){
$pag = 1;
}else{
$pag = $_GET['pag'];
}
$result = $fn->totalFilasReporte($param);
list($total) = mysql_fetch_row($result);
$tampag = 10;
$reg1 = ($pag-1) * $tampag;
$query=$fn->generarReporte("","",$reg1, $tampag);
?>
Te muestro lo que hay en mi página de soporte basándome en patrones de diseño:
Código PHP :
<?php
include "funciones/funciones.php";
include "clases/conexion.php";
$cx=new Conexion;
$cx->conectarDB();
$fn=new Funciones;
.
.
.
?>
Finalmente como llamo a la función paginar:
Código PHP :
<div align="left"><strong>Páginas </strong>
<?php echo $fn->paginar($pag, $total, $tampag, "reportes.php?pag=");?>
</div>
Me correo bien a nivel local espero te sirva, y esta es la versión modificada que sirve para que no aparezca tanto número en la paginación:
Código PHP :
public function paginar($actual, $total, $por_pagina, $enlace) {
$maximalista=28;
//echo "TOTAL: ".$total."<p>";
//echo "X PAGINA: ".$por_pagina."<p>";
$totalpaginas = ceil($total/$por_pagina);
if($totalpaginas<=$maximalista){$maximalista=($totalpaginas-1);}
if($maximalista==0){$maximalista=1;}
//echo "TOTAL PAGINAS: ".$totalpaginas."<p>";
$anterior = $actual - 1;$posterior = $actual + 1;
if ($actual>1){$texto = "<a href=\"$enlace$anterior\" class=\"numeros\">«</a> ";}else{$texto = "<span class=\"activo\"><b>«</b></span> ";}
if($actual<=1){
if($maximalista==1){$val1=1;}else{$val1=$maximalista+$actual;}
if($totalpaginas<$val1){$val1=$totalpaginas;}
for ($i=1; $i<=$val1; $i++){
if($i==$actual){$texto .= "<span class=\"activo\"><b>$actual</b></span> ";}else{$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";}
}
}
$entre2=ceil($maximalista/2);
if($actual>1){
if($actual>$maximalista){
if($actual>=$totalpaginas){
//echo "p1<p>";
for ($i=($actual-$entre2); $i<=$actual; $i++){
if($i==$actual){$texto .= "<span class=\"activo\"><b>$actual</b></span> ";}else{$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";}
}
}else{
//echo "p2<p>";
if(($actual+$entre2)>=$totalpaginas){$val=$totalpaginas;}else{$val=$actual+$entre2;}
for ($i=($actual-$entre2); $i<=$val; $i++){
if($i==$actual){$texto .= "<span class=\"activo\"><b>$actual</b></span> ";}else{$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";}
}
}
}else{
//echo "p3<p>";
if(($actual-$entre2)<=0){$val=1;}else{$val=$actual-$entre2;}
if(($actual+$entre2)>$totalpaginas){$val1=$totalpaginas;}else{$val1=$actual+$entre2;}
if($actual<$maximalista){$val1=$maximalista;}
for ($i=$val; $i<=$val1; $i++){
if($i==$actual){$texto .= "<span class=\"activo\"><b>$actual</b></span> ";}else{$texto .= "<a href=\"$enlace$i\" class=\"numeros\">$i</a> ";}
}
}
}
if ($actual<$totalpaginas){$texto .= "<a href=\"$enlace$posterior\" class=\"numeros\">»</a>";}else{$texto .= "<span class=\"activo\"><b>»</b></span>";}
return $texto;
}
public function totalpaginas($total, $por_pagina){
$total_paginas = ceil($total/$por_pagina);
return $total_paginas;
}
Como te das cuenta en esta segunda no uso MAXPAG porque me parece innecesario, espero te sirva si todavía buscas una solución.
Atentamente,
Carlos Piñán.