功能完整的PHP分頁函數,支援自定義每頁顯示條數、保留原URL參數、首頁/尾頁/上下頁/頁碼下拉選單多種導航模式。
REQUEST_URI保留查詢參數shownum(每頁條數)、page(當前頁)、total(總記錄數)參數function pageDivide($total, $shownum = 20, $page = '', $showname = '', $showpage = '', $showselect = '') {
if (!isset($_GET['page'])) $_GET['page'] = 1;
$page = max(1, intval($_GET['page']));
$url = $_SERVER['REQUEST_URI'];
$parse = parse_url($url);
$query = isset($parse['query']) ? $parse['query'] : '';
$query = preg_replace("/([&?])page=\d+/", "", $query);
$pageParam = $query ? "&page=" : "?page=";
$start = ($page - 1) * $shownum;
$prev = max(1, $page - 1);
$next = min(ceil($total / $shownum), $page + 1);
$last = ceil($total / $shownum);
$html = "顯示第 " . ($start + 1) . "-" . min($start + $shownum, $total) . " 條記錄,共 <B>$total</B> 條記錄";
if ($page > 1) {
$html .= " <a href='$pageParam=1'>首頁</a> ";
$html .= " <a href='$pageParam=$prev'>上頁</a> ";
}
$html .= " <a href='$pageParam=$next'>下頁</a> ";
$html .= " <a href='$pageParam=$last'>尾頁</a> ";
if ($showselect) {
$html .= " 到第 <select name='topage' onchange='window.location=\"$pageParam=\"+this.value'>";
for ($i = 1; $i <= $last; $i++) {
$sel = ($i == $page) ? " selected" : "";
$html .= "<option value='$i'$sel>$i</option>";
}
$html .= "</select> 頁,共 $last 頁";
}
return $html;
}
// 基礎用法
echo pageDivide($totalRows, 20);
// 保留其他查詢參數
echo pageDivide($totalRows, 15, '', '', '', true); // 顯示下拉選單
// 在SQL中使用
$offset = ($page - 1) * $shownum;
$sql = "SELECT * FROM table LIMIT $offset, $shownum";
ajax參數支援無刷新分頁...省略頁碼顯示模式(如1 2 3 ... 10 11 12)bootstrap/tailwind等CSS框架類名