2010-04-21 7 views
1

J'ai fait quelques récemment et utilisé en page les éléments suivants:montrant autour des numéros de page

if ($totalPages > $pagesToShow) { 
    $start = $pageNumber - floor($pagesToShow/2); 
    $end = $pageNumber + floor($pagesToShow/2); 

    while ($start < 1) { 
     $start++; 
     $end++; 
    } 

    while ($end > $totalPages) { 
     $start--; 
     $end--; 
    } 

} else { 
    $start = 1; 
    $end = $totalPages; 
} 

pour travailler où commencer et terminer la liste des pages environnantes. Pour qu'une liste de radiomessagerie puisse être créée comme < < 3 4 5> >> '.

Je me demandais simplement s'il y avait une meilleure méthode car l'utilisation de boucles comme cela semble un peu étrange.

Répondre

1

Vous pouvez remplacer la première boucle

while ($start < 1) { 
    $start++; 
    $end++; 
} 

avec

if($start < 1) 
{ 
    $end += (1 - $start); 
    $start = 1; 
} 

Quelque chose de semblable peut être fait pour la deuxième boucle, mais l'inverse:

if ($end > $totalPages) { 
    $start -= ($end - $totalPages); 
    $end = $totalPages; 
} 

Modifier: Il est beaucoup plus facile de couper les numéros de page sont hors limites, remplacez votre code par exemple avec:

$start = $pageNumber - $pagesToShow; 
$end = $pageNumber + $pagesToShow; 

if($start < 1) 
    $start = 1; 

if($end > $totalPages) 
    $end = $totalPages; 

$pagesToShow est le montant maximum de pages à afficher avant et après la page en cours (sinon hors limites)

+0

cela fonctionne bien jusqu'à ce que vous arriviez à l'avant-dernière page où il montrera seulement une page de chaque côté du courant, ou sur la dernière page seulement montrez celui-là. – ianbarker

+0

Vous devez changer '($ totalPages - $ end)' en '($ end - $ totalPages)' Je suppose ... Puisque cela donne un nombre positif ('$ end' est plus grand que' totalPages'), ce nombre positif peut alors être utilisé pour réduire '$ start' pour obtenir un certain nombre devant le numéro de la page en cours. – Veger

0

Vous pourriez regarder dans à utiliser le contrôle Zend_Paginator. Il fonctionne avec des tableaux simples, ainsi que de nombreuses autres choses. Il va même gérer vous donnant un accès simple aux informations de la page précédente/suivante.

Questions connexes