1<?php
2$znxPageH = static fn($v): string => htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8');
3
4$znxCurrentPage = (int)($page ?? 0);
5$znxTotalPages = (int)($page_amount ?? 0);
6$znxBaseUrl = $baseUrl ?? 'index.php';
7
8if ($znxTotalPages > 0):
9 $znxDelta = 2;
10 $znxSteps = array();
11 for ($i = 0; $i < $znxTotalPages; $i++) {
12 if ($i === 0 || $i === $znxTotalPages - 1 || ($i >= $znxCurrentPage - $znxDelta && $i <= $znxCurrentPage + $znxDelta)) {
13 $znxSteps[] = $i;
14 }
15 }
16 $znxItems = array();
17 $znxLast = null;
18 foreach ($znxSteps as $i) {
19 if ($znxLast !== null && $i - $znxLast > 1) $znxItems[] = '...';
20 $znxItems[] = $i;
21 $znxLast = $i;
22 }
23 ?>
24 <style>
25 .znx-pager{--pager-surface:var(--box-inner-bg,var(--box-bg,var(--nz-panel,var(--wc-bg-2,var(--z-panel-2,var(--s-panel,var(--primary,rgb(30,33,40))))))));--pager-text:var(--font-color,var(--text,var(--nz-text,var(--wc-text,var(--z-text,var(--s-text,rgb(155,162,177)))))));--pager-muted:color-mix(in srgb,var(--pager-text) 58%,transparent);--pager-border:var(--border,var(--box-inner-border,var(--box-border,var(--nz-border-soft,var(--wc-line,var(--z-border,var(--s-border2,rgb(19,20,23))))))));--pager-accent:var(--accent,var(--link,var(--nz-accent,#d1a233)));display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;margin:22px 0 0;padding-top:18px;border-top:1px solid var(--pager-border)}
26 .znx-pager a,.znx-pager__current,.znx-pager__ellipsis{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 8px;border-radius:6px;font-size:13px;font-weight:700;text-decoration:none}
27 .znx-pager a{border:1px solid var(--pager-border);background:var(--pager-surface);color:var(--pager-text);cursor:pointer}
28 .znx-pager a:hover{border-color:var(--pager-accent);color:var(--pager-accent)}
29 .znx-pager__current{border:1px solid var(--pager-accent);background:var(--pager-accent);color:#1a1510;cursor:default}
30 .znx-pager__ellipsis{color:var(--pager-muted)}
31 </style>
32 <nav class="znx-pager" aria-label="<?= $znxPageH(t_default('common.pagination', 'Pagination')) ?>">
33 <?php if ($znxCurrentPage > 0): ?>
34 <a href="<?= $znxPageH($znxBaseUrl) ?>?page=<?= $znxCurrentPage - 1 ?>" aria-label="<?= $znxPageH(t('common.previous')) ?>">«</a>
35 <?php endif; ?>
36 <?php foreach ($znxItems as $znxItem): ?>
37 <?php if ($znxItem === '...'): ?>
38 <span class="znx-pager__ellipsis">…</span>
39 <?php elseif ($znxItem === $znxCurrentPage): ?>
40 <span class="znx-pager__current" aria-current="page"><?= (int)$znxItem + 1 ?></span>
41 <?php else: ?>
42 <a href="<?= $znxPageH($znxBaseUrl) ?>?page=<?= (int)$znxItem ?>"><?= (int)$znxItem + 1 ?></a>
43 <?php endif; ?>
44 <?php endforeach; ?>
45 <?php if ($znxCurrentPage < $znxTotalPages - 1): ?>
46 <a href="<?= $znxPageH($znxBaseUrl) ?>?page=<?= $znxCurrentPage + 1 ?>" aria-label="<?= $znxPageH(t('common.next')) ?>">»</a>
47 <?php endif; ?>
48 </nav>
49<?php endif; ?>
50