簡單記錄一下。
簡述
基本的分頁功能有幾個要素:
- 目前頁數
- 總頁數
- 一頁要顯示幾筆資料
只要掌握這些原則就能做出一個很簡單的分頁功能,不過在那之前要先知道怎麼從資料庫裡面撈出正確的資料。
SQL 指令有個關鍵字是 LIMIT
跟 OFFSET
,前者代表「顯示幾筆」後者代表「略過幾筆」。不過有部分的資料庫是用 LIMIT
和 逗號
來表示,例如:
1 | -- 0 ~ 4 的資料 |
但有些資料只支援 OFFSET
的寫法,所以得這樣使用:
1 | -- 0 ~ 4 的資料 |
總之呢,從上面可以看出 LIMIT
是固定的,只要不停地更新 OFFSET
就能產出這樣的規律:
OFFSET = 0
,顯示 0 ~ 4 的資料OFFSET = 5
,顯示 5 ~ 10 的資料OFFSET = 10
,顯示 11 ~ 15 的資料OFFSET = 15
,顯示 15 ~ 20 的資料
這樣就有分頁效果了。
正式實作
這邊拿留言板來舉例,首先得在首頁宣告一些變數來儲存分頁資訊:
page
目前頁數per_page
一頁顯示幾筆資料offset
略過幾筆資料,用來控制頁數total_page
總共有幾頁,用來控制上限值
特別解釋一下 offset
的部分,這需要用到國小數學來設定:
1 | $offset = ($page-1) * $per_page; |
假設 $page
的初始值為 1
,意思是在第一頁的時候要略過 0 筆資料(0 x 5 = 0
),第二頁的時候要略過 5 筆資料( 1 x 5
),以此類推,接著只要更新 $page
,offset
就會跟著改變,這樣就完成了分頁邏輯。
接著只要搭配 <a href="index.php?page=1">
帶上 $_GET['page']
的方式來控制分頁狀態(就像 errorCode 一樣),就可以根據參數值來決定現在要顯示哪些資料。
最後簡單示範一下,其實就是把上面全部組合起來而已:
(這邊只是寫個概念,看的懂就好)
1 | <?php |
最後加上控制用的按鈕就 OK 了:
1 | <a class="pagination__button" href="index.php?page=<?php echo 1; ?>">首頁</a> |
以上~