新聞開發(fā)之分頁功能
分頁是幾乎每個網(wǎng)站都會使用的功能,因為如果內(nèi)容很多,不用分頁的話,頁面顯示會很長很長,使用和查找起來會非常麻煩,所以我們來講下這個很實用的功能。
分頁的總體思路:
分頁就是將數(shù)據(jù)庫中所有的信息以固定的數(shù)量分成若干段,所以這里需要兩個數(shù)據(jù):
每頁顯示的信息條數(shù)$limitPage
獲取當(dāng)前的分頁數(shù)$Page?
由于計算機語言默認(rèn)從0開始獲取記錄
如果設(shè)置每頁顯示數(shù)量為5,$limitPage = 5,
那么第一頁 $page = 1 就會顯示 0, 1, 2 ?, 3 , 4三條記錄
第二頁?$page = 2?就會顯示 5 , 6 , 7 , 8 , 9 , 10 ?三條記錄
第三頁?$page = 3?就會顯示11, 12, 13 , 14 , 15 三條記錄
以此類推。。。。。。。。。
設(shè)置一個參數(shù) $limitFrom 從第幾條數(shù)據(jù)開始讀取
從上面的規(guī)律就可以得到:
$limitFrom = ($page - 1) * $limitPage;
就會分別從第0 ,5, 11條開始獲取數(shù)據(jù)。
接下來就是連接數(shù)據(jù)庫,并統(tǒng)計總的新聞條數(shù):
<?php $link = mysqli_connect('localhost','uesrname','password','news'); $sql = "select * from new"; // select * from表示獲取全部字段的值 $sqlCount = "select count(*) from new"; //count(*)是計算數(shù)據(jù)總的條數(shù) $retQuery = mysqli_query($link, $sqlCount); //查詢數(shù)量sql語句 $retCount = mysqli_fetch_array($retQuery); //獲取數(shù)量 $count = $retCount[0]?$retCount[0]:0; //判斷獲取的新聞數(shù)量 $countNews = $count; ?>
接著,我們給出一個變量$countPage用來表示總共顯示了多少頁
可能我們時長會遇到這樣的情況,假如有100條信息,我們給定的是每頁顯示11個,剩下的1條如何處理呢,
那么我們就要使用%進行取余來判斷:
<?php $countPage = $countNews%$limitPage; //求余數(shù)獲取分頁數(shù)量能否被除盡 if(($countPage) > 0) { //獲取的頁數(shù)有余 $countPage = ceil($countNews/$limitPage); // ceil() 函數(shù)向上舍入為最接近的整數(shù),除不盡則取整數(shù)+1頁, 100個新聞每個頁面顯示11個,成9個頁面,剩余1個單獨成1個頁面,這樣總共有10個頁面 } else { $countPage = $countNews/$limitPage; //如果是10個新聞每個頁面顯示2個,成5個頁面 } ?>
其他參數(shù)上一頁$prev,下一頁$next;
在分頁功能中經(jīng)常會有點擊“上一頁”和點擊“下一頁”進行跳轉(zhuǎn)
先說一下PHP代碼功能實現(xiàn)思路:
上一頁$prev,就是當(dāng)前頁$page -1 一步一步往前頁跳轉(zhuǎn),當(dāng)當(dāng)前頁$page為第一頁的時候再往前跳轉(zhuǎn)就為第0頁了,這顯然會出現(xiàn)bug,
這里我們就需要給它一個設(shè)定,當(dāng)當(dāng)前頁$page為第一頁的時候點擊“上一頁”就設(shè)定它顯示為第一頁,不在往前跳轉(zhuǎn)了。
$prev = ($page - 1 <= 0 )?1:$page-1;
下一頁$next,?就是當(dāng)前頁$page -1 一步一步往后頁跳轉(zhuǎn),問題在于當(dāng)$page為最后一頁的時候點擊“下一頁”再往后跳轉(zhuǎn),
跟上一頁類似,我們設(shè)定它就顯示最后一頁。
$next = ($page + 1 > $countPage)?$countPage:$page+1;
//當(dāng)前頁數(shù)要大于總頁數(shù)的時候就顯示當(dāng)前頁。
<!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分表頁</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一頁</a> <?php for($i=1; $i<=$countPage; $i++):?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endfor;?> <a href="?page=<?php echo $next;?>">|下一頁</a> </div> </body> </html>