<?php
function pagination($url, $actualPage, $numberOfElements, $numberOfElementsPerPage = 10) {
$numberOfPageAroundActualPage = 2;
$numberOfPageAroundEdges = 1;
$url = (string)$url;
$actualPage = (int)$actualPage;
$numberOfElements = (int)$numberOfElements;
$numberOfElementsPerPage = (int)$numberOfElementsPerPage;
$numberOfPages = (int)ceil($numberOfElements / $numberOfElementsPerPage);
$firstShownElement = ((($actualPage - 1) * $numberOfElementsPerPage) + 1);
$lastShownElement = (($actualPage * $numberOfElementsPerPage) > $numberOfElements) ? $numberOfElements : ($actualPage * $numberOfElementsPerPage);
$shownPages = array();
if (($actualPage - 1) > ($numberOfPageAroundActualPage + $numberOfPageAroundEdges + 1)) {
for ($i = 1; $i < ($numberOfPageAroundEdges + 1); ++$i)
$shownPages[] = $i;
$shownPages[] = 'separator';
for ($i = ($actualPage - $numberOfPageAroundActualPage); $i < $actualPage; ++$i)
$shownPages[] = $i;
}
else {
for ($i = 1; $i < $actualPage; ++$i)
$shownPages[] = $i;
}
$shownPages[] = $actualPage;
if (($numberOfPages - $actualPage) > ($numberOfPageAroundActualPage + $numberOfPageAroundEdges + 1)) {
for ($i = ($actualPage + 1); $i <= ($actualPage + $numberOfPageAroundActualPage); ++$i)
$shownPages[] = $i;
$shownPages[] = 'separator';
for ($i = ($numberOfPages - $numberOfPageAroundEdges + 1); $i <= $numberOfPages; ++$i)
$shownPages[] = $i;
}
else {
for ($i = ($actualPage + 1); $i <= $numberOfPages; ++$i)
$shownPages[] = $i;
}
$html = '<div class="pagination" role="navigation">';
$html .= '<div class="pagination-short">';
if (1 === $actualPage)
$html .= '<span><i class="fa fa-angle-double-left"></i></span> ';
else
$html .= '<a href="'.$url.($actualPage-1).'" title="Aller à la page précédente"><i class="fa fa-angle-double-left"></i></a> ';
if ($numberOfPages === $actualPage)
$html .= '<span><i class="fa fa-angle-double-right"></i></span> ';
else
$html .= '<a href="'.$url.($actualPage+1).'" title="Aller à la page suivante"><i class="fa fa-angle-double-right"></i></a> ';
$html .= '</div>';
$html .= '<div class="pagination-pages">';
foreach ($shownPages AS $page) {
if ('separator' === $page)
$html .= '<span>…</span> ';
elseif ($actualPage === $page)
$html .= '<span>'.$page.'</span> ';
else
$html .= '<a href="'.$url.$page.'" title="Aller à la page '.$page.'">'.$page.'</a> ';
}
$html .= '</div>';
$html .= '<div class="pagination-details">';
$html .= 'Page '.$actualPage.' sur '.$numberOfPages.'. ';
$html .= 'Éléments '.$firstShownElement.' à '.$lastShownElement.' sur '.$numberOfElements.' affichés.';
$html .= '</div>';
$html .= '</div>';
return $html;
}
echo pagination('index.php?p=2&page=', 1, 8, 10);
echo pagination('index.php?p=2&page=', 14, 315, 10);
echo pagination('index.php?p=2&page=', 5, 97, 10);
echo pagination('index.php?p=2&page=', 5, 88, 10);
preferences:
36.62 ms | 402 KiB | 5 Q