2010-05-16 19 views
7

Ho il seguente metodo che crea e restituisce markup per i miei collegamenti di paginazione in PHP.Break up PHP Link di paginazione

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

proprio di recente ho scoperto (con mia grande sorpresa) che avevo raggiunto oltre 70 pagine che significa che ci sono ora oltre 70 collegamenti che mostrano nella parte inferiore ..

Mi chiedo se qualcuno può aiutami a rompere questo. Non sono sicuro di quanto la paginazione sia più efficace per mostrare i numeri, se per esempio ... pagina 30, idee?

risposta

4

È sufficiente visualizzare la pagina corrente più le precedenti e le seguenti x (ad esempio 4) pagine.

Se siete su Pagina 1:

1 2 3 4 5 

Pagina 35:

31 32 33 34 35 36 37 38 39 

Pagina 70:

66 67 68 69 70 

Si potrebbe anche aggiungere un veloce l inchiostro alla prima e all'ultima pagina usando « e » per esempio.


Esempio:

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

È possibile anche implementare Infinite History/Pagination, che è super cool. =)


AGGIORNAMENTO: Un altro elegant version of this @ Codepad.

+0

Molto bel aggiornamento, pulito, semplice. – Rabbott

1

si potrebbe fare (a pagina 15)

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

Dove il link [Visualizza altre] recupera il resto (o solo un paio di) collegamenti della pagina. Ciò mantiene le cose in ordine mentre consente all'utente di navigare in tutte le pagine.

Esempio (dopo aver cliccato Vista precedente)

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

o (solo mostrare qualche altro) [Visualizza altro] 7 8 9 10 11 12 13 14 [15] 15 17 18 [Visualizza altro]

Quando dico "recuperare" intendo utilizzare JavaScript per creare collegamenti alle altre pagine w/o ricaricare la pagina

+0

Hai già visto questo? Esempi? – Rabbott

0

si può anche guardare Zend_Paginator, che gestisce un sacco di questi tipi di cose per voi.