這是我寫的PHP簡單分頁 正常輸出 1234567 沒有問題,但是 要是100多頁, 怎樣在 12345....100 省略中間 多個數字呢?
">上一頁 '.$i.''; } else { echo "".$i.""; } } if ($page<$pagenum) { //如果page小於總頁數,顯示下一頁連結 ?> ">下一頁
原效果: 上一頁 123456 下一頁
要是100個頁面 變成: 上一頁 123456.......100 下一頁
回複內容:
這是我寫的PHP簡單分頁 正常輸出 1234567 沒有問題,但是 要是100多頁, 怎樣在 12345....100 省略中間 多個數字呢?
">上一頁 '.$i.''; } else { echo "".$i.""; } } if ($page<$pagenum) { //如果page小於總頁數,顯示下一頁連結 ?> ">下一頁
原效果: 上一頁 123456 下一頁
要是100個頁面 變成: 上一頁 123456.......100 下一頁
涉及到這種變數較多的需求,可以先裡清楚:哪些變數在一定條件是是不變的,而哪一些又是動態變化的。為了把問題說清楚,下面類比定義幾個涉及到分頁的變數:
$total 總記錄數$pagesize 每頁的記錄數$pagenum 總頁碼數$page 當前頁$bothnum 當前頁碼兩邊顯示的頁碼數量
好了,對於分頁,涉及到變數就這麼幾個。為瞭解決這個問題,我們先固定住幾個變數,如下
$total = 100;$pagesize = 10;$pagenum = $total / $pagesize = 10;$bothnum = 5; //表示當前頁碼兩邊顯示 5 個頁碼數量
因此,實際上目前就只有一個變數了就是 $page
表示當前頁,所以在組裝分頁格式的時候,你只要關注 $page
參數的變化就可以了。
為了方便理解,我們準備把組裝的分頁資訊都儲存到一個字串 $pagestr
中。好了準備工作已經完畢,下面就開始製作分頁吧~~。
上一頁
if($page == 1) { $pagestr .= '上一頁'; } else { $pagestr .= '上一頁' }
中間的數字頁碼
// 想象分頁如下,目前第 10 頁,它兩邊最多隻有 5 (bothnum) 個數字 1 ... 5 6 7 8 9 *10* 11 12 13 14 15 ... 100
首頁(第 1 頁)
if(($page - $bothnum) > 1) { $pagestr .= ''; $pagestr .= '...';}
當前頁的左邊
for($i=$bothnum; $i>=1; $i--) { if(($page - $i) < 1 ) { // 當前頁左邊花最多 bothnum 個數字 continue; } $pagestr .= ''; }
當前頁
$pagestr .= ''.$page.'';
當前頁的右邊
for($i=1; $i<=$bothnum; $i++) { if(($page + $i) > $pagenum) { // 當前頁右邊最多 bothnum 個數字 break; } $pagestr .= '';}
尾頁(第 100 頁)
if(($page + $bothnum) < $pagenum) { $pagestr .= '...'; $pagestr .= '';}
下一頁
if($page == $pagenum) { $pagestr .= '下一頁'; } else { $pagestr .= '下一頁' }
原理就基本差不多是這樣,其實這是對製作分頁時思路的一種整理,上面的代碼並沒有經過測試,可以自己調試一下。
當然了,你也可以把它封裝稱為一個分頁類,如果搞掂,也希望能夠分享出來吧。
最後,實際上,還有比如並沒有對分頁參數進行處理,這個需要自己去做,只要把一些額外參數拼接上了就可以了,比較簡單。
你要先定義一個$limitPage,比如為10,最多顯示10頁。
那你的迴圈裡面就不能用$pagenum,你要先比較和$limitPage的大小,然後選擇來迴圈輸出。多的就有省略符號,和輸出最後一頁。
這裡面有很多情況要考慮,總頁面數為0,總頁面數小於等於$limitPage,總頁面數大於$limitPage。
當前頁面數和剩餘頁面數跟$limitPage的比較。細節比較多,好好理一下。