-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPagination.php
95 lines (89 loc) · 3.91 KB
/
Pagination.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
class Common_Pagination
{
public function __construct()
{
}
/**
* Генерация HTML постраничной навигации для списка объявлений
*
* @param int $pageLinkCount - количество страниц всего
* @param int $pageLinkCurrent - номер текущей страницы
* @param string $baseUrl - базовый URL страницы для перехода (без параметров)
* @param string $strParams - список параметров в виде строки с &-разделителем (без параметра с номером страницы)
* @param string $pageParamName - имя параметра для передачи номера страницы
* @param int $pageLinkMaxCount - максимальное количество отображаемых номеров страниц
*
* @return string
*/
public function render(
$pageLinkCount,
$pageLinkCurrent,
$baseUrl,
$strParams = '',
$pageParamName = 'page',
$pageLinkMaxCount = 9
) {
$pageNumberBegin = max(1, ($pageLinkCurrent - 4));
$pageNumberEnd = min($pageLinkCount, ($pageNumberBegin + $pageLinkMaxCount - 1));
$strParams = preg_replace('/^page=(\d)*$/', '', $strParams);
$pageLinkPrev = 'предыдущая';
if ($pageLinkCurrent > 1) {
$pageNumberItem = $pageLinkCurrent - 1;
$pageLinkPrevUrl = "{$baseUrl}?{$pageParamName}={$pageNumberItem}";
if (strlen($strParams)) {
$pageLinkPrevUrl .= "&{$strParams}";
}
$pageLinkPrev = '<a href="' . $pageLinkPrevUrl . '">' . $pageLinkPrev . '</a>';
}
$pageLinkNext = 'следующая';
if ($pageLinkCurrent < $pageLinkCount) {
$pageNumberItem = $pageLinkCurrent + 1;
$pageLinkNextUrl = "{$baseUrl}?{$pageParamName}={$pageNumberItem}";
if (strlen($strParams)) {
$pageLinkNextUrl .= "&{$strParams}";
}
$pageLinkNext = '<a href="' . $pageLinkNextUrl . '">' . $pageLinkNext . '</a>';
}
$content = '
<div class="pagination">
<div class="pagination_right">' . $pageLinkNext . ' <!--Alt -->→</div>
<div class="pagination_left">←<!-- Alt--> ' . $pageLinkPrev . '</div>
<div class="pagination_center">Страницы:
';
if ($pageNumberBegin > 1) {
$pageNumberItem = max(1, ($pageNumberBegin - 5));
$pageNumberItemUrl = "{$baseUrl}?{$pageParamName}={$pageNumberItem}";
if (strlen($strParams)) {
$pageNumberItemUrl .= "&{$strParams}";
}
$content .= '<span><a href="' . $pageNumberItemUrl . '">...</a></span>';
}
$pageNumberItem = $pageNumberBegin;
while ($pageNumberItem <= $pageNumberEnd) {
if ($pageNumberItem==$pageLinkCurrent) {
$content .= '<span class="active">' . $pageNumberItem . '</span>';
} else {
$pageNumberItemUrl = "{$baseUrl}?{$pageParamName}={$pageNumberItem}";
if (strlen($strParams)) {
$pageNumberItemUrl .= "&{$strParams}";
}
$content .= '<span><a href="' . $pageNumberItemUrl . '">' . $pageNumberItem . '</a></span>';
}
$pageNumberItem++;
}
if ($pageNumberEnd < $pageLinkCount) {
$pageNumberItem = min($pageLinkCount, ($pageNumberEnd + 5));
$pageNumberItemUrl = "{$baseUrl}?{$pageParamName}={$pageNumberItem}";
if (strlen($strParams)) {
$pageNumberItemUrl .= "&{$strParams}";
}
$content .= '<span><a href="' . $pageNumberItemUrl . '">...</a></span>';
}
$content .= '
</div>
</div>
';
return $content;
}
}