- ceil: documentation ( source)
<?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 "\n".$html."\n";
}
for ($i = 1; $i <= 12; ++$i)
echo pagination('index.php?p=2&page=', $i, 113, 10);