86 lines
3.1 KiB
PHP
86 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* Reusable pagination view/template component
|
|
* Required variables:
|
|
* $currentPage - Current page number
|
|
* $totalPages - Total number of pages
|
|
*/
|
|
|
|
// Ensure required variables are set
|
|
if (!isset($currentPage) || !isset($totalPages)) {
|
|
return;
|
|
}
|
|
|
|
// Number of page links to show before and after current page
|
|
$range = 2;
|
|
?>
|
|
|
|
<?php if ($totalPages > 1): ?>
|
|
<nav aria-label="Page navigation" class="mt-4">
|
|
<ul class="pagination justify-content-center d-flex flex-row gap-1">
|
|
|
|
<!-- First page -->
|
|
<?php if ($currentPage > 1): ?>
|
|
<li class="page-item">
|
|
<a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . $params) ?>">First</a>
|
|
</li>
|
|
<li class="page-item">
|
|
<a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . ($currentPage > 1 ? '&page_num=' . ($currentPage - 1) : '') . $params) ?>">«</a>
|
|
</li>
|
|
<?php else: ?>
|
|
<li class="page-item disabled">
|
|
<span class="page-link">First</span>
|
|
</li>
|
|
<li class="page-item disabled">
|
|
<span class="page-link">«</span>
|
|
</li>
|
|
<?php endif; ?>
|
|
|
|
<!-- Page numbers -->
|
|
<?php
|
|
for ($i = 1; $i <= $totalPages; $i++) {
|
|
// Show first, last, current page, 2 pages before and after current, and step pages (10, 20, etc.)
|
|
if ($i === 1 ||
|
|
$i === $totalPages ||
|
|
$i === $currentPage ||
|
|
$i === $currentPage - 1 ||
|
|
$i === $currentPage + 1 ||
|
|
$i === $currentPage - 2 ||
|
|
$i === $currentPage + 2 ||
|
|
($i % 10 === 0 && $i > 10)
|
|
) { ?>
|
|
<li class="page-item <?= $i === (int)$currentPage ? 'active' : '' ?>">
|
|
<a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . ($i > 1 ? '&page_num=' . $i : '') . $params) ?>">
|
|
<?= $i ?>
|
|
</a>
|
|
</li>
|
|
<?php
|
|
} elseif ($i === $currentPage - 3 || $i === $currentPage + 3) {
|
|
?>
|
|
<li class="page-item disabled">
|
|
<span class="page-link">...</span>
|
|
</li>
|
|
<?php
|
|
}
|
|
} ?>
|
|
|
|
<!-- Last page -->
|
|
<?php if ($currentPage < $totalPages): ?>
|
|
<li class="page-item">
|
|
<a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . '&page_num=' . ($currentPage + 1) . $params) ?>">»</a>
|
|
</li>
|
|
<li class="page-item">
|
|
<a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . '&page_num=' . $totalPages . $params) ?>">Last</a>
|
|
</li>
|
|
<?php else: ?>
|
|
<li class="page-item disabled">
|
|
<span class="page-link">»</span>
|
|
</li>
|
|
<li class="page-item disabled">
|
|
<span class="page-link">Last</span>
|
|
</li>
|
|
<?php endif; ?>
|
|
</ul>
|
|
</nav>
|
|
<?php endif; ?>
|