PHP開(kāi)發(fā)簡(jiǎn)單新聞發(fā)布系統(tǒng)之簡(jiǎn)單分頁(yè)功能介紹
分頁(yè)顯示是一種非常常見(jiàn)的瀏覽和顯示大量資料的方法,屬於web程式設(shè)計(jì)中最常處理的事件之一。
所謂分頁(yè)顯示,也就是將資料庫(kù)中的結(jié)果集人為的分成一段一段的來(lái)顯示,這裡需要兩個(gè)初始的參數(shù):
每頁(yè)顯示新聞數(shù)量: $limitNews
取得目前的分頁(yè)數(shù):$page
由於電腦語(yǔ)言預(yù)設(shè)從0開(kāi)始取得記錄
若設(shè)定每頁(yè)顯示數(shù)量為3,$limitNews = 3,
那麼第一頁(yè)$page = 1 就會(huì)顯示0, 1, 2 ?三筆記錄
第二頁(yè)?$page = 2?就會(huì)顯示3, 4, 5 ?三筆記錄
第三頁(yè)?$page = 3?就會(huì)顯示6, 7,8 三筆記錄
依此類推。 。 。 。 。 。 。 。 。
設(shè)定一個(gè)參數(shù)$limitFrom 從第幾個(gè)資料開(kāi)始讀取
從上面的規(guī)律就可以得到:
$limitFrom = ($page - 1 ) * $limitNews;
就會(huì)分別從第0 ,3, 6條開(kāi)始取得資料。
下一步我們就需要連接資料庫(kù)並讀取資料
我們?nèi)匀皇褂们懊娼⒌馁Y料庫(kù)名稱test和表名new:
<?php $link = mysqli_connect('localhost','uesrname','password','test'); $sql = "select * from new"; // select * from表示獲取全部字段的值 $sqlCount = "select count(*) from new"; //count(*)統(tǒng)計(jì)的是結(jié)果集的總條數(shù) ?>
透過(guò)查詢語(yǔ)句取得資料庫(kù)表中的新聞總數(shù)$countNews
<?php $retQuery = mysqli_query($link, $sqlCount); //查詢數(shù)量sql語(yǔ)句 $retCount = mysqli_fetch_array($retQuery); //獲取數(shù)量 $count = $retCount[0]?$retCount[0]:0; //判斷獲取的新聞數(shù)量 $countNews = $count; ?>
這裡需要給到另一個(gè)參數(shù)$countPage 總共顯示多少頁(yè)
現(xiàn)在就出現(xiàn)另一個(gè)問(wèn)題,如果有10個(gè)新聞紀(jì)錄,每頁(yè)顯示3個(gè)紀(jì)錄,那剩餘的一條怎麼辦?
我們就要用%取餘來(lái)判斷:
<?php $countPage = $countNews%$limitNews; //求余數(shù)獲取分頁(yè)數(shù)量能否被除盡 if(($countPage) > 0) { //獲取的頁(yè)數(shù)有余 $countPage = ceil($countNews/$limitNews); // ceil() 函數(shù)向上舍入為最接近的整數(shù),除不盡則取整數(shù)+1頁(yè), 10個(gè)新聞每個(gè)頁(yè)面顯示3個(gè),成3個(gè)頁(yè)面,剩余1個(gè)單獨(dú)成1個(gè)頁(yè)面,這樣總共有4個(gè)頁(yè)面 } else { $countPage = $countNews/$limitNews; //如果是9個(gè)新聞每個(gè)頁(yè)面顯示3個(gè),成3個(gè)頁(yè)面 } ?>
#其他參數(shù)上一頁(yè)$prev,下一頁(yè)$next;
在分頁(yè)功能中常常會(huì)有點(diǎn)選「上一頁(yè)」和點(diǎn)選「下一頁(yè)」進(jìn)行跳轉(zhuǎn)
先說(shuō)一下PHP程式碼功能實(shí)現(xiàn)想法:
上一頁(yè)$prev,就是當(dāng)前頁(yè)$page -1 一步一步往前頁(yè)跳轉(zhuǎn),噹噹前頁(yè)$page為第一頁(yè)的時(shí)候再往前跳轉(zhuǎn)就為第0頁(yè)了,這顯然會(huì)出現(xiàn)bug,
這裡我們就需要給它一個(gè)設(shè)定,噹噹前頁(yè)$page為第一頁(yè)的時(shí)候點(diǎn)擊“上一頁(yè)”就設(shè)定它顯示為第一頁(yè),不在往前跳轉(zhuǎn)了。
$prev = ($page - 1 <= 0 )?1:$page-1;
下一頁(yè)$next,?就是當(dāng)前頁(yè)$page -1 一步一步往後頁(yè)跳轉(zhuǎn),問(wèn)題在於當(dāng)$page為最後一頁(yè)的時(shí)候點(diǎn)擊「下一頁(yè)」再往後跳轉(zhuǎn),
#跟上一頁(yè)類似,我們?cè)O(shè)定它就顯示最後一頁(yè)。
$next = ($page + 1 > $countPage)?$countPage:$page+1;
//目前頁(yè)數(shù)大於總頁(yè)數(shù)的時(shí)候就顯示目前頁(yè)。
下面展示頁(yè)面程式碼:
<!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分表頁(yè)</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一頁(yè)</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;?>">|下一頁(yè)</a> </div> </body> </html>
註解:上面的程式碼使用for迴圈來(lái)實(shí)作 1,2,3。 。 。 。的頁(yè)面效果。