Foros del Web » Programando para Internet » PHP »

ayuda con paginacion

Estas en el tema de ayuda con paginacion en el foro de PHP en Foros del Web. Hola a todos, yo tengo armada una paginacion la cual al buscar pone los numeros de paginas y siguiente si es mas de 1 y ...
  #1 (permalink)  
Antiguo 15/07/2009, 09:21
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 14 años, 11 meses
Puntos: 3
ayuda con paginacion

Hola a todos, yo tengo armada una paginacion la cual al buscar pone los numeros de paginas y siguiente si es mas de 1 y cuando estoy en la pagina 2 pone agrega el anterior para poder ir cambiando para atras y adelante.
Hasta ahi anda todo perfecto, el problema que tengo es que la db tiene mas 300000 registros y como se imaginan si uno busca por 1 letra o 2 los resultados que arroja son mas de 2000 y el tema que como tengo puesto a 15 registros por pagina, la cantidad de pagina que pone son un monton y obviamente queda mal y se hace muy pesado todo.
Lo que yo queria saber es como se puede hacer para que quede como google por ej, que ponen solo 10 paginas y siguiente y anterior y a medida que uno va pasando con siguiente se van agregando las que siguen.
aca les pongo el codigo que estoy usando yo

if($total_registros) {
if(($pagina - 1) > 0) {
?>

<a href="?categoria=<?php echo $categoria ?>&busqueda=<?php echo $busqueda?>&periodo=<?php echo $periodo?>&pagina=<?=($pagina-1)?>"> Anterior</a>
<?php
}
?>
<?php
for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i) {
?>
<a href = '#'><?=$pagina; ?></a>
<?php
} else {
?>
<a href="?categoria=<?php echo $categoria ?>&busqueda=<?php echo $busqueda?>&periodo=<?php echo $periodo?>&pagina=<?=$i; ?>" ><?php echo $i; ?></a>
<?php
}
}
if(($pagina + 1)<=$total_paginas) {
?>
<a href="?categoria=<?php echo $categoria ?>&busqueda=<?php echo $busqueda?>&periodo=<?php echo $periodo?>&pagina=<?=($pagina+1);?>">Siguiente</a>
<?php

la idea seria modificar esto para que aparezca como les comente.

muchisimas gracias.
  #2 (permalink)  
Antiguo 15/07/2009, 09:40
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: ayuda con paginacion

No veo por ningún lado el sql, esto se resuelve utilizando la clausula LIMIT:

Código:
select * from tabla where ... LIMIT cantidad_a_devolver OFFSET cantidad_desplazamiento
donde "cantidad_desplazamiento" seria "cantidad_a_devolver" * numero_pagina
  #3 (permalink)  
Antiguo 15/07/2009, 09:41
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 2 meses
Puntos: 11
Respuesta: ayuda con paginacion

mmmm... pues imagino que paginandolo de nuevo. Igual que paginas que por cada página aparezcan 15 registros, haz que por cada página aparezcan X números.
Es decir, que haga por ejemplo... ?pag=1 y aqui le dices de 1 a 15 registros, pero que cuando vaya por ejemplo por el 6, que no muestre el uno con algo así... if ($pag == 6) echo $pags > 2.... no se, imagino que así se podría hacer =)
  #4 (permalink)  
Antiguo 15/07/2009, 09:56
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: ayuda con paginacion

el sql es este

if (!$pagina) {
$inicio = 0;
$pagina = 1;
}else{
$inicio = ($pagina - 1) * $registros;
}
//SI ESTA LLENO EL EJEMPLAR BUSCO POR NOMBRE//
if (!empty($busqueda)){
$resultado_1 =mysql_query("SELECT A.TOMO,A.FOLIO,A.NOMBRE np ,C.TOMO,C.FOLIO,C.NOMBRE nm, B.NOMBRE,B.TOMO,B.FOLIO,B.FECHA_NAC,B.tha,B.fha FROM publeje AS A RIGHT JOIN publeje AS B on (B.TP=A.TOMO and B.FP = A.FOLIO) LEFT JOIN publeje AS C on (B.TM=C.TOMO and B.FM = C.FOLIO) where B.NOMBRE like '$busqueda%' order by B.nombre LIMIT $inicio, $registros") or die(mysql_error());

donde registros es fijo y es 15

el tema que asi por ej si son 2000 registros aparecen 2000/15 paginas osea 1 2 3 4 5 6 7 8 9 10 11... asi hasta la cuenta esa que es bastante grande el resultado,por eso la idea es que aparezca por ej 1 2 3 4 5 6 7 siguiente y a medida que uno vaya aumentando de pagina aparezca 2 3 4 5 6 7 8 siguiente algo asi seria lo que necesito.

espero que se haya entendido

gracias.
  #5 (permalink)  
Antiguo 15/07/2009, 09:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: ayuda con paginacion

Primero: con la funcion ceil, asi:
$totalpaginas=ceil($totalregistros/$registrosporpagina) --hallas el numero maximo de paginas,

Ahora te digo como haces lo de google.

Imagino por ejemplo que tienes una variable con la pagina actual, llamemosla $pagina que creo que es la que utilizas,

Ahora, solo te explico en teoria como seria

if (pagina>0)
<a href='mipagina.php?pagina=($pagina-1)&demasvariables'>Anterior</a>

$paginasanteriores=$pagina;
$numpaginasanteriores=0;
while ($numpaginasanteriores<10){
if ($paginasanteriores<10)
break;
$paginasanteriores-=1;
<a href='mipagina.php?pagina=$paginasanteriores&demas variables'>$paginasanteriores</a>
$numpaginasanteriores+=1;
}
$pagina -- Este es el numero de la pagina actual

$paginassiguientes=$pagina;
$numpaginassiguientes=0;
while ($numpaginassiguientes<10){
if ($paginassiguientes<10)
break;
$paginassiguientes-=1;
<a href='mipagina.php?pagina=$paginassiguientes&demas variables'>$paginassiguientes</a>
$numpaginassiguientes+=1;
}

if ($pagina<$totalpaginas)
<a href='mipagina.php?pagina=($pagina+1)&demasvariabl es'>Siguiente</a>


Como tedije es un bosquejo inicial, pero con el te puedes guiar.

Saludos, espero te ayude.
  #6 (permalink)  
Antiguo 15/07/2009, 10:40
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: ayuda con paginacion

$paginasanteriores=$pagina;
$numpaginasanteriores=0;
while ($numpaginasanteriores<10){
if ($paginasanteriores<10)
break;
$paginasanteriores-=1;
<a href='mipagina.php?pagina=$paginasanteriores&demas variables'>$paginasanteriores</a>
$numpaginasanteriores+=1;
}
$pagina -- Este es el numero de la pagina actual

$paginassiguientes=$pagina;
$numpaginassiguientes=0;
while ($numpaginassiguientes<10){
if ($paginassiguientes<10)
break;
$paginassiguientes-=1;
<a href='mipagina.php?pagina=$paginassiguientes&demas variables'>$paginassiguientes</a>
$numpaginassiguientes+=1;
}


esto es lo que tendria que cambiar en el mio no? porque lo anterior y siguiente estan iguales que como los pusiste vos.
asi como me pusiste quedari del 1 al 10 y cuando vaya avanzando o retrocediendo iria poniendo las siguientes siempre limitado a 10? osea 1 2 3 4 5 6 7 8 9 10 cuando este en la 1 y uando este en la pagina 2 seria 2 3 4 5 6 7 8 9 10 11?

si es asi lo pruebo y te cuento

gracias.
  #7 (permalink)  
Antiguo 15/07/2009, 10:46
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: ayuda con paginacion

Si, es asi.
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 08:37.