diff --git a/app/helpers/pagination.php b/app/helpers/pagination.php
index 7445ba5..1614e39 100644
--- a/app/helpers/pagination.php
+++ b/app/helpers/pagination.php
@@ -15,6 +15,10 @@
if (isset($_REQUEST['event'])) {
$param .= '&event=' . $_REQUEST['event'];
}
+
+ $max_visible_pages = 10;
+ $step_pages = 10;
+
if ($browse_page > 1) {
echo 'first';
} else {
@@ -22,21 +26,42 @@
}
for ($i = 1; $i <= $page_count; $i++) {
- if ($i === $browse_page) {
- if ($browse_page > 1) {
- echo '<<';
- } else {
- echo '<<';
- }
+ // always show the first, last, step pages (10, 20, 30, etc.),
+ // and the pages close to the current one
+ if (
+ $i === 1 || // first page
+ $i === $page_count || // last page
+ $i === $browse_page || // current page
+ $i === $browse_page -1 ||
+ $i === $browse_page +1 ||
+ $i === $browse_page -2 ||
+ $i === $browse_page +2 ||
+ ($i % $step_pages === 0 && $i > $max_visible_pages) // the step pages - 10, 20, etc.
+ ) {
+ if ($i === $browse_page) {
+ // current page, no link
+ if ($browse_page > 1) {
+ echo '<<';
+ } else {
+ echo '<<';
+ }
+ echo '[' . $i . ']';
- echo '[' . $i . ']';
- if ($browse_page < $page_count) {
- echo '>>';
+ if ($browse_page < $page_count) {
+ echo '>>';
+ } else {
+ echo '>>';
+ }
} else {
- echo '>>';
+ // other pages
+ echo '[' . $i . ']';
}
- } else {
- echo '[' . $i . ']';
+ // show ellipses between distant pages
+ } elseif (
+ $i === $browse_page -3 ||
+ $i === $browse_page +3
+ ) {
+ echo '...';
}
}