* $mntPagerPage = 3; // current page, 1-based * $mntPagerPages = 7; // number of pages * $mntPagerTotal = 163; // rows matching the current filters * $mntPagerPer = 25; // rows per page */ $mntPagerPages = max(1, (int)($mntPagerPages ?? 1)); $mntPagerPage = min(max(1, (int)($mntPagerPage ?? 1)), $mntPagerPages); $mntPagerTotal = (int)($mntPagerTotal ?? 0); $mntPagerPer = max(1, (int)($mntPagerPer ?? 25)); /** Keeps the active filters, drops page when it would be redundant. */ $mntPagerLink = static function (int $page, ?int $per = null) use ($mntPagerUrl) { $query = $_GET; unset($query['page'], $query['per_page']); if ($per !== null) { $query['per_page'] = $per; } elseif (isset($_GET['per_page'])) { $query['per_page'] = $_GET['per_page']; } if ($page > 1) { $query['page'] = $page; } return $mntPagerUrl . ($query ? '?' . http_build_query($query) : ''); }; $mntFirstRow = $mntPagerTotal ? (($mntPagerPage - 1) * $mntPagerPer) + 1 : 0; $mntLastRow = min($mntPagerPage * $mntPagerPer, $mntPagerTotal); // A window around the current page: with 40 pages, 40 links are noise. $mntWindowFrom = max(1, $mntPagerPage - 2); $mntWindowTo = min($mntPagerPages, $mntPagerPage + 2); ?>