Forum Moderators: coopster
/**
* Build a set of pagination links for large result sets.
*
* @param int The number of results
* @param int The number of results per page
* @param int The current page
* @param string The base URL to add page numbers to
* @return string The built pagination
*/
function BuildPagination($resultCount, $perPage, $currentPage, $url)
{
if ($resultCount <= $perPage) {
return;
}
$pageCount = ceil($resultCount / $perPage);
$pagination = '';
if ($currentPage > 1) {
$pagination .= sprintf("<a href='%s'>««</a> ¦", BuildPaginationUrl($url, 1));
$pagination .= sprintf(" <a href='%s'>« %s</a> ¦", BuildPaginationUrl($url, $currentPage - 1), GetLang('Prev'));
}
else {
$pagination .= '« ' . GetLang('Prev') . ' ¦';
}
$MaxLinks = 10;
if ($pageCount > $MaxLinks) {
$start = $currentPage - (floor($MaxLinks / 2));
if ($start < 1) {
$start = 1;
}
$end = $currentPage + (floor($MaxLinks / 2));
if ($end > $pageCount) {
$end = $pageCount;
}
if ($end < $MaxLinks) {
$end = $MaxLinks;
}
$pagesToShow = ($end - $start);
if (($pagesToShow < $MaxLinks) && ($pageCount > $MaxLinks)) {
$start = $end - $MaxLinks + 1;
}
}
else {
$start = 1;
$end = $pageCount;
}
for ($i = $start; $i <= $end; ++$i) {
if ($i > $pageCount) {
break;
}
$pagination .= ' ';
if ($i == $currentPage) {
$pagination .= sprintf(" <strong>%d</strong> ¦", $i);
} else {
$pagination .= sprintf(" <a href='%s'>%d</a> ¦", BuildPaginationUrl($url, $i), $i);
}
}
if ($currentPage == $pageCount) {
$pagination .= ' ' . GetLang('Next') . ' »';
} else {
$pagination .= sprintf(" <a href='%s'>%s »</a> ¦", BuildPaginationUrl($url, $currentPage + 1), GetLang('Next'));
$pagination .= sprintf(" <a href='%s'>»»</a>", BuildPaginationUrl($url, $pageCount));
}
return $pagination;
}
function BuildPaginationUrl($url, $page)
{
if (isc_strpos($url, "{page}") === false) {
if (isc_strpos($url, "?") === false) {
$url .= "?";
}
else {
$url .= "&";
}
$url .= "page=$page";
}
else {
$url = str_replace("{page}", $page, $url);
}
return $url;
}