$total_pages) $page = $total_pages; return [ 'items' => [], // ฝั่ง caller เซ็ตเอง 'total' => $total, 'total_pages' => $total_pages, 'page' => $page, 'per_page' => $per_page, ]; } } if (!function_exists('paginateArray')) { /** * แบ่งหน้าจาก array * @return array [items_for_page, total, total_pages, current_page, per_page] */ function paginateArray(array $items, int $page = 1, int $per_page = 20): array { $allowed = [20, 50, 100, 150]; if (!in_array($per_page, $allowed, true)) $per_page = 20; $total = count($items); $total_pages = max(1, (int)ceil($total / $per_page)); if ($page < 1) $page = 1; if ($page > $total_pages) $page = $total_pages; $offset = ($page - 1) * $per_page; $slice = array_slice(array_values($items), $offset, $per_page); return [ 'items' => $slice, 'total' => $total, 'total_pages' => $total_pages, 'page' => $page, 'per_page' => $per_page, ]; } } if (!function_exists('renderPagination')) { /** * แสดง pagination control แบบ <1 2 3 ... 500> * @param array $info ผลจาก paginateArray() * @param array $base_params พารามิเตอร์ GET อื่นๆ ที่ต้องคงไว้ในลิงก์ */ function renderPagination(array $info, array $base_params = []): void { $page = $info['page']; $total_pages = $info['total_pages']; $per_page = $info['per_page']; $total = $info['total']; // ล้าง page/per_page จาก base unset($base_params['page']); $build = function($p) use ($base_params) { $base_params['page'] = $p; return '?' . http_build_query($base_params); }; $build_pp = function($pp) use ($base_params) { $base_params['per_page'] = $pp; $base_params['page'] = 1; return '?' . http_build_query($base_params); }; // คำนวณช่วงเลขหน้าที่จะโชว์ (window ขนาด 5 รอบหน้าปัจจุบัน + first/last) $window = 2; $pages = []; $start = max(2, $page - $window); $end = min($total_pages - 1, $page + $window); $pages[] = 1; if ($start > 2) $pages[] = '…'; for ($i = $start; $i <= $end; $i++) $pages[] = $i; if ($end < $total_pages - 1) $pages[] = '…'; if ($total_pages > 1) $pages[] = $total_pages; $from = $total === 0 ? 0 : (($page - 1) * $per_page + 1); $to = min($page * $per_page, $total); static $css_printed = false; if (!$css_printed): $css_printed = true; ?>
แสดง จาก รายการ
ต่อหน้า: