2010-05-16 21 views
7

Tengo el siguiente método que crea y devuelve el marcado para mis enlaces de paginación en PHP.Romper enlaces de paginación PHP

public function getPaginationLinks($options) { 
    if($options['total_pages'] > 1) { 
     $markup = '<div class="pagination">'; 

     if($options['page'] > 1) { 
      $markup .= '<a href="?page=' . ($options['page'] - 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">< prev</a>'; 
     }  

     for($i = 1; $i <= $options['total_pages']; $i++) { 

      if($options['page'] != $i) { 
       $markup .= '<a href="?page='. $i . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">' . $i . '</a>'; 
      } 
      else { 
       $markup .= '<span class="current">' . $i . '</span>'; 
      } 
     } 

     if($options['page'] < $options['total_pages']) { 
      $markup .= '<a href="?page=' . ($options['page'] + 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">next ></a>'; 
     } 

     $markup .= '</div>'; 

     return $markup; 
    } 
    else { 
     return false; 
    } 
} 

Hace poco descubrí (para mi sorpresa) que había alcanzado más de 70 páginas que significa que ahora hay más de 70 enlaces que muestran en la parte inferior ..

Me pregunto si alguien puede ayúdame a romper esto. No estoy seguro de cómo la mayoría de la paginación funciona en cuanto a mostrar los números, si es que digo ... página 30, ¿ideas?

Respuesta

4

Acaba de mostrar la página actual más la anterior y la siguiente x (digamos 4) páginas.

Si estás en Página 1:

1 2 3 4 5 

Página 35:

31 32 33 34 35 36 37 38 39 

Página 70:

66 67 68 69 70 

Usted puede también añadir un l rápido tinta a la primera y última página usando « y » por ejemplo.


Ejemplo:

$x = 4; 

for ($i = $currentPage - $x; $i < $currentPage; $i++) 
{ 
    if ($i >= 1) { /* show link */} 
    else { /* show ellipsis and fix counter */ $i = 1; } 
} 

/* show current page number without link */ 

for ($i = $currentPage + 1; $i < $currentPage + $x; $i++) 
{ 
    if ($i <= $totalPages) { /* show link */} 
    else { /* show ellipsis and break */ break; } 
} 

También puede implementar Infinite History/Pagination, que es super guay. =)


UPDATE: A más elegant version of this @ Codepad.

+0

muy agradable actualización, limpio y sencillo. – Rabbott

1

que podría hacer (en la página 15)

[View Previous] 12 13 14 [15] 15 17 18 [View More] 

Cuando el [Ver más] enlace obtiene el resto (o unos pocos más) enlaces de la página. Esto mantiene las cosas despejadas mientras permite al usuario navegar por todas las páginas.

Ejemplo (después de hacer clic en Vista anterior)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 15 17 18 [View More] 

o (simplemente mostrar algunos más) [Ver Más] 7 8 9 10 11 12 13 14 [15] 15 17 18 [Ver Más]

Cuando digo "recuperación" me refiero a usar JavaScript para crear enlaces a otras páginas w/o volver a cargar la página

+0

¿Has visto esto antes? ¿Ejemplos? – Rabbott

0

también puede mirar en Zend_Paginator, que maneja una gran cantidad de este tipo de cosas para usted.