2010-05-16 4 views
7

Mam następujący sposób, który tworzy i zwraca znaczników dla moich stronicowania linki w PHP.Przerwij linki do stronicowania 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; 
    } 
} 

Właśnie niedawno odkryli (ku mojemu zdziwieniu), że dotarł 70+ stron, co oznacza, że ​​obecnie 70 + linki wskazujące na dole ..

Zastanawiam się, czy ktoś może pomóż mi to zepsuć ... Nie jestem pewien, jak działa większość stronicowania, jeśli chodzi o pokazywanie liczb, jeśli im się to podoba .. strona 30, pomysły?

Odpowiedz

4

Po prostu wyświetlasz bieżącą stronę oraz poprzednią i następującą x (powiedzmy 4) strony.

Jeśli jesteś na Strona 1:

1 2 3 4 5 

strona 35:

31 32 33 34 35 36 37 38 39 

strona 70:

66 67 68 69 70 

Można też dodać szybkie l tusz na pierwszą i ostatnią stronę, na przykład przy użyciu « i ».


Przykład:

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

Można również wdrożyć Infinite History/Pagination, który jest uber cool. =)


UPDATE: Bardziej elegant version of this @ Codepad.

+0

Bardzo miła zmiana, czyste, proste. – Rabbott

1

Można to zrobić (na stronie 15)

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

Jeżeli [Zobacz więcej] Link pobiera resztę (lub po prostu kilka więcej) strona odwołuje. Dzięki temu rzeczy nie są uporządkowane, a jednocześnie pozwalają użytkownikowi nawigować po wszystkich stronach.

Przykład (po kliknięciu: Poprzedni)

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

lub (tylko wykazują niewiele więcej) [zobacz więcej] 7 8 9 10 11 12 13 14 [15] 15 17 18 [zobacz więcej]

Kiedy mówię „fetch” znaczy użyć JavaScript do tworzenia linków do innych stron w/o przeładowania strony

+0

Widziałeś to już wcześniej? Przykłady? – Rabbott

0

można również spojrzeć na Zend_Paginator, który obsługuje wiele tego rodzaju rzeczy dla Ciebie.