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 '...'; } }