2010-05-16 21 views
7

Ich habe die folgende Methode, die Markup für meine Paginierung Links in PHP erstellt und zurückgibt.Breakup PHP Paginierung Links

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

ich erst vor kurzem entdeckt (zu meiner Überraschung), die ich mehr als 70 Seiten erreicht hatte, was bedeutet, dass es jetzt 70+ zeigen Links unten nach oben ..

Ich frage mich, wenn jemand helfen Sie mir, das aufzulösen .. Ich bin nicht sicher, wie die meisten Seitenzahlen soweit funktionieren, als die Zahlen zu zeigen, wenn ich sage ... Seite 30, Ideen?

Antwort

4

Sie zeigen nur die aktuelle Seite plus die vorherige und die folgenden x (sagen wir 4) Seiten an.

Wenn Sie auf Seite 1:

1 2 3 4 5 

Seite 35:

31 32 33 34 35 36 37 38 39 

Seite 70:

66 67 68 69 70 

Sie könnte auch ein hinzufügen schnell l Tinte auf die erste und letzte Seite mit « und » zum Beispiel.


Beispiel:

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

Sie können auch Infinite History/Pagination implementieren, die uber cool ist. =)


UPDATE: Eine elegant version of this @ Codepad.

+0

Sehr schönes Update, sauber, einfach. – Rabbott

1

könnten Sie tun (auf Seite 15)

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

Wo der [Mehr] Link, um den Rest (oder nur ein paar mehr) Seite Links abruft. Dies hält die Dinge übersichtlich, während der Benutzer durch alle Seiten navigieren kann.

Beispiel (nach dem Klicken Ansicht Vorherige)

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

oder (zeigt nur ein paar mehr) [Mehr] 7 8 9 10 11 12 13 14 [15] 15 17 18 [Mehr]

Wenn ich sage „holen“ ich meine Javascript verwenden Links zu den anderen Seiten zu erstellen w/o die Seite

+0

Haben Sie das schon einmal gesehen? Beispiele? – Rabbott

0

Nachladen Sie können bei Zend_Paginator, die man sich auch viele diese Art von Dingen umgeht.