Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Paginación

Estas en el tema de Paginación en el foro de PHP en Foros del Web. Hola tengo echo una paginación y quiero que cuando tengo más de 15 páginas se corte para no alargarlo tanto, pongo un ejemplo por si ...
  #1 (permalink)  
Antiguo 04/07/2014, 04:06
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Paginación

Hola tengo echo una paginación y quiero que cuando tengo más de 15 páginas se corte para no alargarlo tanto, pongo un ejemplo por si no se me entiende.

Ejemplo que tengo para mostrar 25 páginas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Y lo que quiero es que al haber más de 15 aparezca:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 25

y claro que cuando llege a seleccionar el 15, me aparezca:
1 ... 15 16 17 18 19 20 21 22 23 24 25

No se si es un metodo adecuado de hacer, pero yo no consigo que me salga, si hay un metodo mejor para realizar esto o parecido seria bueno también. Lo que intento es que no se agrande las paginas ya que me descuadra el diseño cuando hay más de 15 páginas.


Aquí os dejo el código:

Código PHP:
Ver original
  1. if($respuesta > 0) { $ultima_pagina = floor($ultima_pagina) + 1; }
  2.    
  3.     $html .= '<div id="pagination" style="position:absolute">';
  4.    
  5.     $html .= '<div class="pag">';
  6.  
  7.     if($actual > 1) {
  8.        
  9.         $html .= '<a href="?sec='.$_GET['sec'].'">Primera</a>';
  10.  
  11.         $html .= '<a href="?sec='.$_GET['sec'].'&pg='.$pagina_anteior.'" class="an">Anterior</a>';
  12.  
  13.     }else {
  14.        
  15.         $html .= '<a langhref="#" class="dis">Primera</a>';
  16.  
  17.         $html .= '<a langhref="#" class="dis">Anterior</a>';
  18.        
  19.     }
  20.    
  21.     for($i = 1; $i <= $ultima_pagina; $i++) {
  22.        
  23.         if($i == $actual) {
  24.        
  25.             $html .= '<a langhref="#" class="sel">'.$i.'</a>';
  26.        
  27.         }else {
  28.                
  29.             $html .= '<a href="?sec='.$_GET['sec'].'&pg='.$i.'">'.$i.'</a>';
  30.            
  31.            
  32.            
  33.         }
  34.        
  35.     }
  36.  
  37.     if($actual < $ultima_pagina) {
  38.  
  39.         $html .= '<a href="?sec='.$_GET['sec'].'&pg='.$pagina_siguiente.'" class="sg">Siguiente</a>';
  40.    
  41.         $html .= '<a href="?sec='.$_GET['sec'].'&pg='.$ultima_pagina.'">Última</a>';
  42.  
  43.     }else {
  44.        
  45.         $html .= '<a langhref="#" class="dis">Siguiente</a>';
  46.    
  47.         $html .= '<a langhref="#" class="dis">Última</a>';
  48.        
  49.     }
  50.    
  51.     $html .= '<div style="float:right; margin-top:5px">&nbsp; Página '.$actual.' de '.$ultima_pagina.' &nbsp;</div>';
  52.        
  53.     $html .= '</div>';
  54.    
  55.     $html .= '</div>';

Un saludo.
  #2 (permalink)  
Antiguo 04/07/2014, 04:45
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Paginación

Yo tengo algo parecido...

Te lo he cambiado un poco, pq lo tenia en una clase... pero bueno xD

Código PHP:
function getPageLine($page) {
        return 
'<li>'.($page).'</li>';
    }
    
function 
getPages($current_page$total_pages$max_pages_show 5) {
                    
            
            
            
$paginator '<ul>';
            
            
$divider floor($max_pages_show 2);
            
            
$page_lines = array();
            for(
$i = ($current_page $divider); $i <= ($current_page $divider); $i++) {
                
$page $i $i $max_pages_show-abs($i);
                if(
$page $total_pages$page $i $max_pages_show;
                
$page_lines[$page] = getPageLine($page);
                            
            }
            
ksort($page_lines);
                
            foreach(
$page_lines as $page => $line) if($page 0$paginator .= $line;
                
            
            
$paginator .= '</ul>';    
            
            return 
$paginator;
        
        
    }

echo 
getPages(11,30,15); 
Es algo sencillo que hice, y q he ido "puliendo" (al principio era un desastre de condicionales!).
Está más o menos bonito. Funciona bien con máximos impares (xD), y te muestra las N-páginas más cercanas a la página actual :D

Podrías adaptarlo a tus necesidades. Un saludo!
EDIT: Salió de aqui: http://www.forosdelweb.com/f18/optim...nales-1101264/, por si quieres leer algún comentario ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 04/07/2014, 07:57
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Paginación

Gracias Eleazan pero gusataría poder seguir utilizando mi código porque es el trozo que utilizo para la paginación pero tiene más código y es un palo adaptar el que me pasaste. Por lo que me gustaría poder simplemente añadir en mi código para adaptar esa funcionalidad que intento hacer.

Saludos.
  #4 (permalink)  
Antiguo 04/07/2014, 08:24
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Paginación

Mira mi for, y el tuyo...

Toma la idea de ahí ;)

La idea viene a ser esta:

¿15 registros? eso son 7 x la izq, pagina actual, y 7 por la derecha
Así saca el for... después, comprueba si la pagina se "pasa", y le cambia el valor (si se pasa por la derecha, pq es la ultima pagina o algo).

Reordena, e imprime las lineas...
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 04/07/2014, 10:41
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Paginación

Gracias de nuevo Eleazan ya lo e mejorado gracias a tu código ;)

Un saludo.

Etiquetas: paginacion
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 11:58.