Аргументы:
-
$format
- строка-урл, должен быть %s для подстановки страниц -
$found
- количество найденных результатов -
$page_id
- номер страницы из GET-запроса -
$limit
- лимит, обычно 50
function get_pagination($format, $found, $page_id, $limit = 50) {
$html = '<div class="paging">';
$pagetpl = function($n, $alt = '') use ($page_id, $format) {
$alt = $alt ?: $n+1;
if ($n == $page_id) {
return '<span class="page-active">'.$alt.'</span>';
} else {
return ' <a href="'.sprintf($format, $n).'" class="page">'.$alt.'</a> ';
}
};
$max = (int)($found / $limit) + (($found % $limit) ? 0 : 1);
if ($found == 0) $max = 0;
$a = $page_id - 5;
$a = max($a, 0);
$b = $page_id + 5;
if ($b >= $max) $b = $max;
if ($page_id > 0) $html .= $pagetpl($page_id + 1, '←');
if ($a > 0) $html .= $pagetpl(0);
if ($a > 2) $html .= $pagetpl($a-1, '…');
for ($n = $a; $n <= $b; $n++) $html .= $pagetpl($n);
if ($b < $max - 1) $html .= $pagetpl($b+1, '…');
if ($b < $max) $html .= $pagetpl($max);
if ($page_id < $max) $html .= $pagetpl($page_id + 1, '→');
return "$html</div>";
}