Аргументы:
-
$format
- строка-урл, должен быть %s для подстановки страниц -
$found
- количество найденных результатов -
$page_id
- номер страницы из GET-запроса -
$limit
- лимит, обычно 50
1function get_pagination($format, $found, $page_id, $limit = 50) {
2
3 $html = '<div class="paging">';
4 $pagetpl = function($n, $alt = '') use ($page_id, $format) {
5
6 $alt = $alt ?: $n+1;
7 if ($n == $page_id) {
8 return '<span class="page-active">'.$alt.'</span>';
9 } else {
10 return ' <a href="'.sprintf($format, $n).'" class="page">'.$alt.'</a> ';
11 }
12 };
13
14 $max = (int)($found / $limit) + (($found % $limit) ? 0 : 1);
15 if ($found == 0) $max = 0;
16
17 $a = $page_id - 5;
18 $a = max($a, 0);
19 $b = $page_id + 5;
20 if ($b >= $max) $b = $max;
21
22 if ($page_id > 0) $html .= $pagetpl($page_id + 1, '←');
23
24 if ($a > 0) $html .= $pagetpl(0);
25 if ($a > 2) $html .= $pagetpl($a-1, '…');
26
27 for ($n = $a; $n <= $b; $n++) $html .= $pagetpl($n);
28
29 if ($b < $max - 1) $html .= $pagetpl($b+1, '…');
30 if ($b < $max) $html .= $pagetpl($max);
31
32 if ($page_id < $max) $html .= $pagetpl($page_id + 1, '→');
33
34 return "$html</div>";
35}