Estoy tratando de establecer una condición para la paginación de php-mysql para que pueda cambiar la página actual " li " a " li class="active" " para marcar la página seleccionada actual. Soy nuevo en php y busco un tutorial de paginación de este tipo, pero no tuve suerte.
He hecho hasta ahora lo que funciona pero no puedo marcar la página seleccionada. Aquí $id es para detectar la identificación de la página actual. ¿Cómo puedo establecer una condición (u otra) para poder marcar el elemento de la página actual en la paginación? Mil gracias por ayudarme.
<ul class="pagination"> <?php if($id > 1) {?> <li><a href="?id=<?php echo ($id-1) ?>">Previous</a></li><?php }?> <?php for($i=1;$i <= $page;$i++){ ?> <?php if ($id>1) { ?> <li class="active"><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li> <?php } ?> <!-- <li><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li> --> <?php } ?> <?php if($id!=$page) //3!=4 {?> <li><a href="?id=<?php echo ($id+1); ?>">Next</a></li> <?php }?> </ul>Podrías cambiar tu ciclo for de
<?php for($i=1;$i <= $page;$i++){ ?> <?php if ($id>1) { ?> <li class="active"><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li> <?php } ?> <!-- <li><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li> --> <?php } ?>para:
<?php for($i=1;$i <= $page;$i++){ $class=($i==$id)? ' class="active"' : ''; echo '<li'.$class.'><a href="?id='.$i.'">'.$i.'</a></li>'; } ?>Si entendí su código correctamente, $page representa el total de páginas y $id representa la página actual, esto establecerá el número de página actual como la clase activa y dejará las otras páginas sin la clase.
Suponiendo que $id es el número de página actual y que $page es el número total de páginas, debe resaltar solo una haciendo lo siguiente en su bucle:
if($i==$id) // highlightelse // don't highlight Sus principales errores son que no probó si $i==$id y no tenía una versión alternativa sin resaltar.
Realmente creo que deberías simplificar tu código separando tu lógica del HTML. De lo contrario, se vuelve muy ilegible y muy difícil de administrar.
Me he tomado la libertad de hacer justamente eso. De esta manera, puede ver dónde la lógica hace el trabajo duro, y solo necesita imprimir los resultados en el HTML.
<?php $id=3; // test value $page=20; // test value $li=array(); // temporary array for convenience $template='<li%s><a href="?id=%s">%s</a></li>'; if($id>1) $li[]=sprintf($template,'',$id-1,'Previous'); for($i=1;$i<=$page;$i++) { if($i==$id) $li[]=sprintf($template,' class="active"',$i,$i); // Current else $li[]=sprintf($template,'',$i,$i); } if($id<$page) $li[]=sprintf($template,'',$id+1,'Next'); $li=implode('',$li); // convert to string for printing ?> <ul class="pagination"> <?php print $li; ?> </ul>También verás dos técnicas para facilitar las cosas:
implode en una cadena despuéssprintf facilita la definición de una cadena de plantilla, por lo que puede administrar el componente HTML más fácilmente y completar los espacios cuando llegue el momento.