首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 通用分頁類封裝與使用指南

     編輯:PHP 相關知識

設計思路

列表頁幾乎都需要分頁,將分頁邏輯封裝為獨立函數 pageft() 存放於 pageft.php,使用時 include 並調用即可。設計目標:可移植、易用、不輸出直接生成變量供調用者控制。

核心函數 pageft.php 完整代碼

<?php
if (!function_exists('pageft')) {
    function pageft($totle, $displaypg = 20, $url = '') {
        global $page, $firstcount, $pagenav, $_SERVER;
        $GLOBALS['displaypg'] = $displaypg; // 導出每頁條數供外部 LIMIT 使用

        // 當前頁碼,默認第 1 頁
        if (!$page) $page = 1;

        // 基礎 URL 處理:去除舊 page 參數,追加佔位符
        if (!$url) $url = $_SERVER['REQUEST_URI'];
        $parse = parse_url($url);
        $query = $parse['query'] ?? '';
        if ($query) {
            $query = preg_replace('/(^|&)page=\d+/', '', $query);
            $url = str_replace($parse['query'], $query, $url);
            $url .= ($query ? '&page' : 'page');
        } else {
            $url .= '?page';
        }

        // 頁碼計算
        $lastpg = ceil($totle / $displaypg);      // 總頁數
        $page = min($lastpg, max(1, $page));      // 邊界修正
        $prepg = $page - 1;                       // 上一頁
        $nextpg = ($page == $lastpg) ? 0 : $page + 1; // 下一頁,0 表示無
        $firstcount = ($page - 1) * $displaypg;   // LIMIT 起始偏移

        // 生成導航 HTML
        $pagenav = "顯示第 " . ($totle ? $firstcount + 1 : 0) . "-" . min($firstcount + $displaypg, $totle) . " 條,共 $totle 條記錄";
        if ($lastpg <= 1) return false; // 單頁直接返回

        $pagenav .= " <a href='{$url}=1'>首頁</a> ";
        $pagenav .= $prepg ? " <a href='{$url}={$prepg}'>前頁</a> " : " 前頁 ";
        $pagenav .= $nextpg ? " <a href='{$url}={$nextpg}'>後頁</a> " : " 後頁 ";
        $pagenav .= " <a href='{$url}={$lastpg}'>尾頁</a> ";

        // 下拉跳轉選單
        $pagenav .= " 到第 <select onchange='location=this.value'>";
        for ($i = 1; $i <= $lastpg; $i++) {
            $sel = ($i == $page) ? " selected" : "";
            $pagenav .= "<option value='{$url}={$i}'{$sel}>{$i}</option>";
        }
        $pagenav .= "</select> 頁,共 {$lastpg} 頁";
    }
}
?>

使用示例

<?php
include('pageft.php');

// 1. 獲取總記錄數
$total = mysql_result(mysql_query("SELECT COUNT(*) FROM mytable"), 0);

// 2. 調用分頁函數(每頁 10 條,使用當前 URL)
pageft($total, 10);

// 3. 查詢當前頁數據
$result = mysql_query("SELECT * FROM mytable LIMIT $firstcount, $displaypg");
while ($row = mysql_fetch_assoc($result)) {
    // 輸出列表行...
    echo $row['title'] . "<br>";
}

// 4. 輸出分頁導航
echo $pagenav;
?>

關鍵變量說明

變量用途
$firstcountSQL LIMIT 起始偏移量
$displaypg每頁顯示條數(同傳入參數)
$pagenav完整分頁導航 HTML 字符串,直接 echo 輸出
$page當前頁碼(可用於頁碼顯示)

優化建議

  • 將 mysql_* 替換為 mysqli 或 PDO。
  • 導航 HTML 可提取為模板,便於樣式定制。
  • 增加 AJAX 分頁支持:返回 JSON 數據,前端渲染。
  • 大數據量場景建議使用 LIMIT offset, rows 優化或游標分頁。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved