Foros del Web » Programando para Internet » PHP »

Problemas con indice de paginación.

Estas en el tema de Problemas con indice de paginación. en el foro de PHP en Foros del Web. Hola, buenas a todos, me he iniciado hace poco con este maravilloso y a veces incordiante mundo de la programación,jeje. Estoy en un proyecto y ...
  #1 (permalink)  
Antiguo 11/09/2013, 05:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Problemas con indice de paginación.

Hola, buenas a todos, me he iniciado hace poco con este maravilloso y a veces incordiante mundo de la programación,jeje. Estoy en un proyecto y tengo un problema que es el siguiente:

No se como mostrar el indice de la paginación para que no me salgan todas las páginas. Quiero una cosa así: 1 2 3 4....100 101 102.

Para no poner el código completo, pongo donde muestro los resultados de la paginacion, lo que no se es como parar el bucle y decirle que muestre los actuales y los ultimos. Si me pudieran ayudar se los agradeceria. Creo que va aqui nada mas:

//codigo

<?php

$last=$totalPages_Rs+1;

$current=$pageNum_Rs+1;

for ($i = 1; $i <= $last; $i++) {

if($current==$i){

echo $i." ";

}else{?>

<a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, min($totalPages_Rs, $i-1), $queryString_Rs); ?>"><? echo $i;?></a>

<?

}

}
//fin de codigo
  #2 (permalink)  
Antiguo 11/09/2013, 10:14
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 8 meses
Puntos: 44
Respuesta: Problemas con indice de paginación.

ok hay muchas formas para "parar" el bucle como lo mencionas.

Una forma puede ser desde que obtienes los valores usando la sentencia "LIMIT" (aquí está el manual deSELECT)

La otra es mediante un "if" dentro de tu bucle y lo vas colocando en el sitio que desees.

no sé si me expliqué... pero puedes googlear un poco para ver cómo funcionan los paginadores y darte una idea sobre cómo ponerlo tu.

suerte!!
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!
  #3 (permalink)  
Antiguo 11/09/2013, 17:45
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: Problemas con indice de paginación.

Piensa sobre lo que quieres iterar.Quieres iterar desde cero a <numero de páginas> , o desde cero a <numero de elementos en el paginador>?

Si quieres un paginador que contenga 1,2,3,4,...,100,101 , el número de elementos del paginador son sólo 7.
  #4 (permalink)  
Antiguo 12/09/2013, 03:07
 
Fecha de Ingreso: septiembre-2013
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Problemas con indice de paginación.

Gracias por las contestaciones. Lo de LIMIT creo que es para las consultas con query si no me equivoco. Las consultas las tengo echas bien ya que me limita las páginas correctamente. Lo que me gustaria hacer y no se como es que si tengo 1.000 paginas no me salgan todas en el indice de paginacion. La verdad que me da igual que no se vean las ultimas, "simplemente" que se vallan ocultando las primeras que van pasando y que muestren unos 7 indices de paginas: 4.5.6.7.8.9.10.

Seguiré intentandolo, pero ya estoy por dejarlo na mas con los botones de siguiente y anterior, todavía soy novato en php.

Gracias nuevamente y saludos.
  #5 (permalink)  
Antiguo 12/09/2013, 09:22
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 8 meses
Puntos: 44
Respuesta: Problemas con indice de paginación.

así es lo del limit es para las consultas, y el hecho de que te arrojen el resultado "esperado" no significa que estén bien, por ejemplo:

imagina que quieres mostrar 10 resultados por página, necesitarias usar el limit indicando el inicio y el fin, y en cada elemento incrementas ese "limit" (que no lo quieres ocupar) y ahí tendrías resuelto tu problema... pero como es solo para el query... no lo uses

Puse en google busqué "paginacion mysql php" y el primer resultado es un tutorial para hacer la paginación... te lo dejo acá... hay que googlear un poco antes de pedir ayuda...

;)



suerte!!!
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!

Última edición por p414; 12/09/2013 a las 09:33 Razón: faltó explicación
  #6 (permalink)  
Antiguo 13/09/2013, 07:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Problemas con indice de paginación.

Hola. Creo que me he explicado mal. El limite de productos por página lo tengo bien y lo puedo cambiar cuando quiera con el limit. Lo que me gustaria es que no me salieran todas las paginas en el indice, donde tu pinchas para pasar de pagina. Te agradezco el enlace que me pasaste pero si te fijas en el codigo ese tampoco hace lo que quiero, limitar los numeros que aparecen en el indice.

Voy a poner todo el codigo y veras que ya tengo la funcion LIMIT en la consulta y todo lo demas funciona bien:


<?php

$currentPage = $_SERVER["PHP_SELF"];

$maxRows_Rs = 22;// este numero es el numero de resultados que quieren que se vean por pagina pueden poner algo asi: $maxRows_Rs = 6; para ver paginas con 6 resultados

$pageNum_Rs = 0;

if (isset($_GET['pageNum_Rs'])) {

$pageNum_Rs = $_GET['pageNum_Rs'];

}

$startRow_Rs = $pageNum_Rs * $maxRows_Rs;



mysql_select_db($db);

$query_Rs = "SELECT * FROM productos ORDER BY nombre ASC"; // SELECT Anterior



if (isset($_GET['id'])) // Si existe la variable "id" en la barra url...

{

$id = $_GET['id'];

$query_Rs = "SELECT * FROM productos WHERE nombre = '$id' ORDER BY nombre ASC";

}



//*BUSCADOR DE REGISTROS!*/





$query_limit_Rs = sprintf("%s LIMIT %d, %d",$query_Rs, $startRow_Rs, $maxRows_Rs);

$Rs = mysql_query($query_limit_Rs, $conexion) or die(mysql_error());

$row_Rs = mysql_fetch_assoc($Rs);



if (isset($_GET['totalRows_Rs'])) {

$totalRows_Rs = $_GET['totalRows_Rs'];

} else {

$all_Rs = mysql_query($query_Rs);

$totalRows_Rs = mysql_num_rows($all_Rs);

}

$totalPages_Rs = ceil($totalRows_Rs/$maxRows_Rs)-1;



$queryString_Rs = "";

if (!empty($_SERVER['QUERY_STRING'])) {

$params = explode("&", $_SERVER['QUERY_STRING']);

$newParams = array();

foreach ($params as $param) {

if (stristr($param, "pageNum_Rs") == false &&

stristr($param, "totalRows_Rs") == false) {

array_push($newParams, $param);

}

}

if (count($newParams) != 0) {

$queryString_Rs = "&" . htmlentities(implode("&", $newParams));

}

}

$queryString_Rs = sprintf("&totalRows_Rs=%d%s", $totalRows_Rs, $queryString_Rs);

?>




<?php do { ?>

<div class="caja">

<div class="cajafoto"><img src="<?php echo $row_Rs ['imagen']?>" width="100" height="90"></div>
<div class="cajanombre"><?php echo $row_Rs ['nombre']?></div>
<div class="cajaprecio1"><p><b>Precio:</b><?php echo $row_Rs ['precio']?>&euro;</div>
<div class="cajaprecio2"></div>

<div class="cajaprecio3"> <form action="detalle.php" method="post" name="detalle">
<input name="id" type="hidden" value="<?php echo $row_Rs ['id']?>"/>
<input class="button" type="submit" value="Detalle"/>
</form></div>

</div>

<?php } while ($row_Rs = mysql_fetch_assoc($Rs));




?>

</table></td>

</tr>

<tr>

<td><table width="590" border="0" cellspacing="0" cellpadding="0">

<tr>

<td height="16"><img src="images/wna_linea_horiz.gif" width="580" height="1"></td>

</tr>

<tr>

<td height="10"><table width="590" height="34" border="0" cellpadding="0" cellspacing="0">

<tr bgcolor="#FBFBFB">

<td width="65" class="texto-chico"><div align="center">

<?php if ($pageNum_Rs > 0) { // Show if not first page ?>

<a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, 0, $queryString_Rs); ?>" class="txt-paginador"><strong>Primero</strong></a>

<?php } // Show if not first page ?>

</div></td>

<td width="80" class="texto-chico"><div align="center">

<?php if ($pageNum_Rs > 0) { // Show if not first page ?>

<a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, max(0, $pageNum_Rs - 1), $queryString_Rs); ?>" class="txt-paginador"><strong> &lt; Anterior</strong></a>

<?php } // Show if not first page ?>

</div></td>

<td width="312"><div align="center" class="titCategoria"><strong>

<?php

$last=$totalPages_Rs+1;

$current=$pageNum_Rs+1;

for ($i = 1; $i <= $last; $i++) {

if($current==$i){

echo $i." .";

}else{?>

<a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, min($totalPages_Rs, $i-1), $queryString_Rs); ?>"><? echo $i;?></a>

<?

}

}

?>

</strong></div></td>

<td width="77"><div align="right" class="txt-paginador">

<?php if ($pageNum_Rs < $totalPages_Rs) { // Show if not last page ?>

<div align="center"><a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, min($totalPages_Rs, $pageNum_Rs + 1), $queryString_Rs); ?>" class="txt-paginador"><strong>Siguiente &gt; </strong></a> </div>

<?php } // Show if not last page ?>

</div></td>

<td width="56"><div align="right">

<?php if ($pageNum_Rs < $totalPages_Rs) { // Show if not last page ?>

<div align="center" class="txt-paginador"><span class="titCategoria"><a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, $totalPages_Rs, $queryString_Rs); ?>" class="txt-paginador"><strong>Ultimo</strong></a></span> </div>

<?php } // Show if not last page ?>

</div></td>

</tr>

</table>

<div align="left"></div>

<table width="590" border="0" align="left" cellpadding="0" cellspacing="0">

<tr>

<td height="26"><div align="right" class="text-marroncito"><strong>Est&aacute; en la P&aacute;gina:

<?

if($totalPages_Rs==0){

echo "0/0";

}else{

echo $pageNum_Rs+1;

echo "/";

echo $totalPages_Rs+1;

}

?>

</strong></div></td>

</tr>

</table></td>

</tr>

</table></td>

</tr>

</table></td>

</tr>

</table>
</div>
</div>
  #7 (permalink)  
Antiguo 13/09/2013, 12:35
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Problemas con indice de paginación.

Pasa por las condiciones que le den.
En este ejemplo muestra 3 páginas a cada lado de la actual:

[Primero][Anterior] 7 8 9 [10] 11 12 13 [Siguiente][Ultimo]


Cambia las condiciones de acuerdo a lo que desees.
Código PHP:
Ver original
  1. $CantReg = 100; // total de registros de la BBDD
  2. $rango = 6;
  3.  
  4. for ($e = 1; $e <= $last; $e++) {
  5.    // actual
  6.    if ($e == $current) {
  7.       echo "<td><font><b>" . $e . "</b></font></td>";
  8.    } else {
  9.       /**
  10.        * El asunto anda por aquí.
  11.        **/
  12.       if ((($e >= 1 ) and ($e > (1) + $rango)) and (($e <= $CantReg) and ($e < ($last) - $rango))) {
  13.          echo "<td><a href='" . $_SERVER["PHP_SELF"] . "?pag=" . $e . "'>";
  14.          echo "<font>" . $e . "</font></a></td>";
  15.       }
  16.    }
  17. }
  #8 (permalink)  
Antiguo 16/09/2013, 04:28
 
Fecha de Ingreso: septiembre-2013
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Problemas con indice de paginación.

Hola. Gracias por tu aportación. Si, tienes razón, el asunto tiene que estar por ai. He estado probando y no hay manera. Me sale siempre la página en la que estoy sin enlaces ni nada. Seguiré intentandolo.

Gracias y S2.
  #9 (permalink)  
Antiguo 17/09/2013, 05:55
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Problemas con indice de paginación.

No está resuelta la vista de la primera y la última página, pero por lo demás debería mostrar algo así:

Primero < Anterior 1 2 3 ..[n].. 100 101 102 Siguiente > Ultimo
Código PHP:
Ver original
  1. $rango = 2;
  2. //-------------------------------------------------------------
  3. for ($i = 1; $i <= $last; $i++) {
  4.    // página actual
  5.    if (($current == $i) && ($i > 1) && ($i < $last)) {
  6.       echo ".. " . $i . " ..";
  7.    } else {
  8.       // páginas a su lado
  9.       if (($i <= 1 + $rango) or ($i >= $last - $rango)) {
  10.          ?>
  11.          <a href="<?php printf("%s?pageNum_Rs=%d%s", $currentPage, min($totalPages_Rs, $i - 1), $queryString_Rs); ?>"><? echo $i; ?></a>
  12.          <?
  13.       }
  14.    }
  15. }
  #10 (permalink)  
Antiguo 17/09/2013, 11:58
 
Fecha de Ingreso: septiembre-2013
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Problemas con indice de paginación.

Eres un maquina. Te doy mil gracias xd, no sabes todas las vueltas que le he dado a este asunto con mi poca experiencia. Gracias, gracias, gracias por tomarte parte de tu tiempo ayudando a los novatos como yo. Me haz hecho muy feliz hoy. Si algun dia vienes a las Palmas de Gran Canaria avisame que te invito a comer, es lo menos que podria hacer.

S2 y estoy por aqui para lo que haga falta.

Etiquetas: indice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:13.