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

PHP 長文章手動分頁實作(自訂分頁標記法)

     編輯:PHP 綜合知識

設計概念

在文章內容中植入特殊標記(如 `

p0

`、`

p1

`...),PHP 讀取時解析標記位元組偏移,依 URL 參數 `ptag` 顯示對應區段。適合內容固定、編輯器可插入標記的場景。

資料表結構建議

CREATE TABLE article (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(255),
  content MEDIUMTEXT,  -- 含 p0, p1... 標記
  created_at DATETIME
);

完整分頁邏輯

<?php
// 1. 取得文章
$stmt = $pdo->prepare('SELECT content FROM article WHERE id = ?');
$stmt->execute([41]);
$row = $stmt->fetch();
$content = $row['content'];

// 2. 掃描標記位置
$tags = [];
$tag = 0;
while (($pos = strpos($content, "p$tag")) !== false) {
    $tags[] = $pos;
    $tag++;
}
$totalPages = count($tags);

// 3. 判斷要顯示第幾頁
$ptag = isset($_GET['ptag']) ? (int)$_GET['ptag'] : 0;
$ptag = max(0, min($ptag, $totalPages - 1));

// 4. 截取內容
if ($totalPages === 0) {
    $display = $content; // 無標記,全文顯示
} elseif ($ptag === 0) {
    $display = substr($content, 0, $tags[0]);
} else {
    $start = $tags[$ptag - 1] + 2; // 跳過標記本身
    $end = $tags[$ptag];
    $display = substr($content, $start, $end - $start);
}

// 5. 輸出內容
echo $display;

// 6. 產生分頁導航
if ($totalPages > 0) {
    echo '<div class="pagination">';
    for ($i = 0; $i < $totalPages; $i++) {
        $class = ($i === $ptag) ? ' class="active"' : '';
        echo "<a href=\"?ptag=$i\"$class>" . ($i + 1) . "</a> ";
    }
    echo '</div>';
}
?>

優缺點分析

優點缺點
邏輯簡單、無需額外欄位需人工在內容插入標記,維護成本高
分頁斷點可精確控制(段落、圖片間)不支援自動依字數/高度分頁
資料庫只存單一 content 欄位標記若被誤刪會導致分頁錯亂

現代替代方案建議

  • 自動分頁:依字數/HTML 標籤結構自動切分(如每 2000 字、在 `

    ` 處切分)
  • 分表儲存:`article_page` 表存 `article_id, page_no, content`,支援獨立編輯、SEO 友善
  • 前端虛擬滾動:單頁載入全文,JS 依視窗高度動態渲染(適合行動端長文)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved