He estado formateando tu código. Échale un ojo a la diferencia y verás como se lee mucho mejor. El tema de formatear bien los códigos parece una chorrada, pero cuando tienes que volver a mirar la clase después de un tiempo, te aseguro que te arrepentirás de no haberlo hecho. Además, no cuesta nada, lo vas haciendo según programas, sólo tienes que tener una metodología y mantenerla siempre.
Código PHP:
Ver original[HIGHLIGHT="PHP"]
<!-- Listado (Empieza) -->
<?
//AL PRINCIPIO COMPRUEBO SI HICIERON CLICK EN ALGUNA PÁGINA
if (isset($_GET['page'])) { $page = $_GET['page'];
} else {
//SI NO DIGO QUE ES LA PRIMERA PÁGINA
$page=1;
}
//AQUÍ SE SELECCIONAN TODOS LOS DATOS DE LA TABLA
$consulta = "SELECT PR.nombreempresa, PR.provprof, PR.pobprof, PR.descripciongym, PR.descuento, PV.idprovincia, PV.provincia, PO.idpoblacion, PO.poblacion ";
$consulta .= "FROM provincia PV, poblacion PO, profesionales PR WHERE PR.provprof = PV.idprovincia AND PR.pobprof = PO.idpoblacion ";
$consulta .= "ORDER BY fechaingreso ASC";
//MIRO CUANTOS DATOS FUERON DEVUELTOS
//AQUÍ SE DECIDE CUANTOS RESULTADOS MOSTRAR POR PÁGINA , PONGO 5
$rows_per_page = 5;
//CALCULO LA ÚLTIMA PÁGINA
$lastpage = ceil($num_rows / $rows_per_page);
//COMPRUEBO QUE EL VALOR DE LA PÁGINA SEA CORRECTO Y SI ES LA ULTIMA PÁGINA
$page = (int)$page;
if ($page > $lastpage) {
$page= $lastpage;
}
if ($page < 1) {
$page=1;
}
//CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA
$limit = "SELECT PR.nombreempresa, PR.provprof, PR.pobprof, PR.descripciongym, PR.descuento, PV.idprovincia, PV.provincia, PO.idpoblacion, PO.poblacion ";
$limit .= "FROM provincia PV, poblacion PO, profesionales PR WHERE PR.provprof = PV.idprovincia AND PR = PO.idpoblacion ";
$limit .= "ORDER BY fechaingreso ASC ";
$limit .= "LIMIT " . ($page -1) * $rows_per_page . "," . $rows_per_page;
//REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIOR + EL $limit)
//SI ES CORRECTA MUESTRO LOS DATOS
?>
<!------- Div que repite por cada registro (Empieza) ---------->
<div id="tablaslistado">
<table class="generaltablist">
<tr>
<th rowspan="4" scope="col"><img src="http://www.forosdelweb.com/images/fotosprof/ejemplo.gif" width="100px" height="100px" style="padding-top:22px;" alt="ejemplo gimnasio" align="left" /></th>
<th height="20" scope="col" align="left"><?php echo $registrolistado["nombreempresa"]; ?></th>
<th scope="col">Descuento:</th>
</tr>
<tr>
<td rowspan="2"><?php echo $registrolistado["descripciongym"]; ?></td>
<td class="celdadescuento" width="70" height="70px"><?php echo $registrolistado["descuento"]; ?>%</td>
</tr>
<tr>
<td rowspan="2" align="center"><a href="">+ info</a></td>
</tr>
<tr>
<td align="left"><?php echo $registrolistado["provincia"]; ?> | <?php echo $registrolistado["poblacion"]; ?></td>
</tr>
</table>
</div>
<div class="clear"></div>
<!------- Div que repite por cada registro (Termina) ---------->
<?php
}
?>
<!------- Paginación (Empieza) ---------->
<?php
//UNA VEZ QUE MUESTRO LOS DATOS TENGO QUE MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA
if ($num_rows != 0) {
$nextpage = $page + 1;
$prevpage = $page - 1;
?>
<ul id="pagination-digg">
<?php
//SI ES LA PRIMERA PÁGINA DESHABILITO EL BOTON DE ANTERIOR, MUESTRO EL 1 COMO ACTIVO Y MUESTRO EL RESTO DE PÁGINAS
if ($page == 1) {
?>
<li class="previous-off">« Anterior</li>
<li class="active">1</li>
<?php
for($i = $page + 1; $i <= $lastpage; $i++) {
?>
<li><a href="index.php?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php
}
//Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON SIGUIENTE O LO DESHABILITO
if ($lastpage > $page) {
?>
<li class="next"><a href="?page=<?php echo $nextpage; ?>">Siguiente »</a></li>
<?php
} else {
?>
<li class="next-off">Siguiente »</li>
<?php
}
} else {
//EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE ANTERIOR Y MUESTRO LAS DEMÁS
?>
<li class="previous"><a href="?page=<?php echo $prevpage; ?>" >« Anterior</a></li>
<?php
for ($i = 1; $i <= $lastpage ; $i++) {
//COMPRUEBO SI ES LA PÁGINA ACTIVA O NO
if ($page == $i) {
?>
<li class="active"><?php echo $i; ?></li>
<?php
} else {
?>
<li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php
}
}
//SI NO ES LA ÚLTIMA PÁGINA ACTIVO EL BOTON SIGUIENTE
if ($lastpage > $page ) {
?>
<li class="next"><a href="?page=<?php echo $nextpage; ?>">Siguiente »</a></li>
<?php
} else {
?>
<li class="next-off">Siguiente »</li>
<?php
}
}
}
?>
</ul>
</div>
<!------- Paginación (Termina) ---------->
</div>
<!-- Listado (Termina) -->
[/HIGHLIGHT]
Además, te comento algunos fallos y mejoras:
- Al ejecutar una consulta de MySQL puedes poner el or die() en la misma línea, así te ahorras un if.
- En una tabla HTML, sólo un tag <tr> puede tener tags <th> dentro, los demás tienen que ser <td>. Si no haces esto, no te validará.
- En la tabla HTML creo que tienes líneas con diferente número de columnas, cuídate de esto y ten orden con los rowspan y colspan. Te lo he puesto como creo que es, pero sin verlo es difícil, pégale un repaso.
- Nunca utilices tags reducidos (<?), utiliza siempre <?php, porque los otros funciones si el servidor los tiene activados, pero puede que muevas el código a otro server, te deje de funcionar todo y te vuelvas loco.
- Para conseguir lo que quieres, que la paginación empiece en la página siguiente a la que estás tienes que modificar el segundo for:
Código PHP:
Ver originalfor ($i = 1; $i <= $lastpage ; $i++)
Por:
Código PHP:
Ver originalfor ($i = $page + 1; $i <= $lastpage ; $i++)
- Para conseguir que sólo llegue hasta un número de páginas, el límite del for tiene que ser más bajo, ya que tal y como lo tienes siempre llegará hasta la última (esto para los dos for):
Código PHP:
Ver originalfor($i = $page + 1; $i <= $lastpage; $i++)
Por:
Código PHP:
Ver originalfor($i = $page + 1; $i <= $page + 8; $i++)
Esto imprimirá desde la página siguiente a la que estás hasta la 7 posiciones más alante. Pero esto te genera un gran problema. Tienes que controlar que realmente existan 7 páginas delante de la que estás, si no lo haces, te imprimirá hasta la que marque, pero al pulsar el link te enviará a la última, y que lo que si tienes hecho es el control de que se ponga un número mayor que el posible. Mucho ojo con esto.
- Por cierto, cuando tienes que abrir y cerrar tags de PHP cada dos líneas queda todo un poco ilegible. Yo prefiero hacer echo desde el código PHP. Sería cambiar esto:
Código PHP:
Ver originalif ($page == $i) {
?>
<li class="active"><?php echo $i; ?></li>
<?php
} else {
?>
<li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php
}
Por esto:
Código PHP:
Ver originalif ($page == $i) {
echo ' <li class="active">' . $i . '</li>';
} else {
echo ' <li><a href="?page=' . $i . '">' . $i . '</a></li>';
}
Yo por lo menos lo veo más limpio
Un saludo.