2010-05-16 7 views
7

J'ai la méthode suivante qui crée et retourne le balisage pour mes liens de pagination en PHP.Break up PHP pagination liens

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; 
    } 
} 

Je viens récemment découvert (à ma grande surprise) que je l'avais atteint 70+ pages qui signifie qu'il ya maintenant plus de 70 liens montrant au bas ..

Je me demande si quelqu'un peut aidez-moi à briser cela ... Je ne suis pas sûr de savoir comment la plupart des pagination fonctionne aussi loin que de montrer les chiffres si je suis sur le point .. page 30, des idées?

Répondre

4

Vous venez d'afficher la page en cours plus les pages précédentes et suivantes x (disons 4).

Si vous êtes sur Page 1:

1 2 3 4 5 

Page 35:

31 32 33 34 35 36 37 38 39 

page 70:

66 67 68 69 70 

Vous pouvez également ajouter un rapide l encre à la première et la dernière page en utilisant « et » par exemple.


Exemple:

$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; } 
} 

Vous pouvez également mettre en œuvre Infinite History/Pagination, ce qui est super cool. =)


UPDATE: A plus elegant version of this @ Codepad.

+0

Très belle mise à jour, propre, simple. – Rabbott

1

Vous pouvez faire (à la page 15)

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

Lorsque le lien [Voir plus] va chercher le reste (ou juste quelques) des liens de la page. Cela garde les choses bien rangées tout en permettant à l'utilisateur de naviguer sur toutes les pages.

Exemple (après avoir cliqué sur Vue précédente)

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

ou (juste montrer un peu plus) [Voir plus] 7 8 9 10 11 12 13 14 [15] 15 17 18 [Voir plus]

Quand je dis « fetch » Je veux dire utiliser javascript pour créer des liens vers les autres pages w/o de recharger la page

+0

Avez-vous déjà vu ça? Exemples? – Rabbott

0

vous pouvez également regarder Zend_Paginator, qui gère beaucoup de ce genre de choses pour vous.