$Result[row][field] 供外部渲染class TVIewPage {
var $Table; // 表名
var $MaxLine; // 每頁行數
var $Offset; // 記錄偏移量 (內部計算)
var $Total; // 總記錄數
var $Number; // 本頁實際讀取數
var $Result; // 二維結果數組 [row][field]
var $TPages; // 總頁數
var $CPages; // 當前頁碼
var $Condition; // WHERE/Order By 片段
var $PageQuery; // 分頁鏈接攜帶參數 [['key'=>'v'],...]
}
// 構造函數
function TVIewPage($TB, $ML, $OF=0) {
$this->Table = $TB;
$this->MaxLine = $ML;
$this->Offset = $OF;
$this->Condition = "";
}
// 設置查詢條件
function SetCondition($s) { $this->Condition = $s; }
// 設置分頁鏈接參數
function SetPageQuery($key, $value) {
$this->PageQuery[] = array('key'=>$key, 'value'=>$value);
}
// 核心:讀取當前頁記錄
function ReadList() {
// 1. 統計總數
$sql = "SELECT COUNT(*) AS total FROM {$this->Table} {$this->Condition}";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
$this->Total = $row['total'];
if ($this->Total > 0) {
// 2. 計算分頁參數
$this->TPages = ceil($this->Total / $this->MaxLine);
$this->CPages = ($this->Offset / $this->MaxLine) + 1;
// 3. 讀取數據
$sql = "SELECT * FROM {$this->Table} {$this->Condition}
LIMIT {$this->Offset}, {$this->MaxLine}";
$res = mysql_query($sql) or die(mysql_error());
$this->Number = mysql_num_rows($res);
// 4. 組裝二維數組
$this->Result = array();
while ($row = mysql_fetch_assoc($res)) {
$this->Result[] = $row;
}
}
return $this->Result;
}
// 生成分頁導航 HTML
function PageBar() {
if ($this->TPages <= 1) return "";
$params = "";
foreach ($this->PageQuery as $p)
$params .= "&{$p['key']}={$p['value']}";
$html = "";
$prev = $this->CPages - 1;
$next = $this->CPages + 1;
if ($this->CPages == 1) {
$html .= "首頁 前頁 ";
if ($this->TPages > 1)
$html .= "下頁
尾頁";
} elseif ($this->CPages == $this->TPages) {
$html .= "首頁
前頁
尾頁 ";
} else {
$html .= "首頁
前頁
下頁
尾頁";
}
$html .= " 共 {$this->TPages} 頁 第 {$this->CPages} 頁";
return $html;
}
<?php
mysql_connect('localhost', 'root', 'pass');
mysql_select_db('mydb');
$page = new TVIewPage('article', 10); // 表 article,每頁 10 條
$page->SetCondition("WHERE status=1 ORDER BY id DESC");
$page->SetPageQuery('cat', $_GET['cat']); // 保留分類參數
$list = $page->ReadList(); // 獲取二維數組
// 渲染數據
foreach ($list as $row) {
echo "{$row['title']}
{$row['summary']}
";
}
// 輸出分頁條
echo $page->PageBar();
?>
mysql_* 替換為 mysqli_*,傳入 $link 參數Condition 中的用戶輸入WHERE id > $lastId LIMIT 10