php本身是沒有分頁概念的,分頁是URL傳參,然后通過mysql查詢語句到數(shù)據(jù)庫獲取數(shù)據(jù),然后實(shí)現(xiàn)的分頁,url上的參數(shù),通過PHP的$_GET都是可以獲取到的。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的永安網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
現(xiàn)在市面上的PHP框架基本都有PHP分頁類,參照文檔直接調(diào)用就好了,如果想看實(shí)現(xiàn)過程,可以去下載一個(gè)TP框架,然后打開里面的分頁類查看里面的源代碼。
第一種:利用Page類和limit方法
$User = M('User'); // 實(shí)例化User對(duì)象
import('ORG.Util.Page');// 導(dǎo)入分頁類
$count = $User-where('status=1')-count();// 查詢滿足要求的總記錄數(shù)
$Page = new Page($count,25);// 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)
$show = $Page-show();// 分頁顯示輸出
// 進(jìn)行分頁數(shù)據(jù)查詢 注意limit方法的參數(shù)要使用Page類的屬性
$list = $User-where('status=1')-order('create_time')-limit($Page-firstRow.','.$Page-listRows)-select();
$this-assign('list',$list);// 賦值數(shù)據(jù)集
$this-assign('page',$show);// 賦值分頁輸出
$this-display(); // 輸出模板
第二種:分頁類和page方法的實(shí)現(xiàn)
$User = M('User'); // 實(shí)例化User對(duì)象
// 進(jìn)行分頁數(shù)據(jù)查詢 注意page方法的參數(shù)的前面部分是當(dāng)前的頁數(shù)使用 $_GET[p]獲取
$list = $User-where('status=1')-order('create_time')-page($_GET['p'].',25')-select();
$this-assign('list',$list);// 賦值數(shù)據(jù)集
import(“ORG.Util.Page”);// 導(dǎo)入分頁類
$count = $User-where('status=1')-count();// 查詢滿足要求的總記錄數(shù)
$Page = new Page($count,25);// 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)
$show = $Page-show();// 分頁顯示輸出
$this-assign('page',$show);// 賦值分頁輸出
$this-display(); // 輸出模板
帶入查詢條件
如果是POST方式查詢,如何確保分頁之后能夠保持原先的查詢條件呢,我們可以給分頁類傳入?yún)?shù),方法是給分頁類的parameter屬性賦值:
import('ORG.Util.Page');// 導(dǎo)入分頁類
$mapcount = $User-where($map)-count();// 查詢滿足要求的總記錄數(shù)
$Page = new Page($count,25);// 實(shí)例化分頁類 傳入總記錄數(shù)和每頁顯示的記錄數(shù)
//分頁跳轉(zhuǎn)的時(shí)候保證查詢條件
foreach($map as $key=$val) {
$Page-parameter .= "$key=".urlencode($val).'';
}
$show = $Page-show();// 分頁顯示輸出
html
head
title分頁顯示/title
/head
script language="javascript"
function confirmDel()
{
var confirm=window.confirm("您確定要?jiǎng)h除嗎?");
if(confirm)
return true;
else
return false;
}
/script
body bgcolor="cce8cf"
center
table border="1" width="90%" cellspacing="1"
tr bgcolor="yellow"
td用戶ID/td
td用戶名/td
td密碼/td
td性別/td
td年齡/td
td電子郵件/td
td操作/td
/tr
?php
error_reporting(0);
//設(shè)置頁大小,即每頁顯示幾條數(shù)據(jù)
$pagesize=10;
//設(shè)置第一頁
$page=1;
//數(shù)據(jù)庫初始化操作
$link=mysql_connect("localhost","root","root");//連接數(shù)據(jù)庫
$db=mysql_select_db("HibernateDemo",$link);//選擇數(shù)據(jù)庫
$sql="select count(*) from userinfo";//構(gòu)造sql語句
$res=mysql_query($sql);//執(zhí)行查詢操作,結(jié)果為總記錄數(shù)
$row=mysql_fetch_array($res);//取出一條記錄
$rows=$row[0];//取出總記錄數(shù)
//判斷一共多少頁
$pages=intval($rows/$pagesize);//取整數(shù)頁,總頁數(shù)
if($rows%$pagesize)
$pages=$pages+1;//如果還有余數(shù)的話,那么就再加一頁來顯示剩余的記錄
//獲取用戶請(qǐng)求,即用戶提交要去哪一頁
$page=$_GET["ToPage"];
//整理用戶輸入
if($page=0)
{
$page=1;//因?yàn)殚_始的時(shí)候沒$page有值,所以是0,所以就讓$page=1,這樣后面的
//$page也就是1,見第97行
}
if($page=$pages)
{
$page=$pages;
}
session_start();
echo "div align='right' top='0'a href='logout.php'注銷".$_SESSION['username']."/a/div";
echo "當(dāng)前第".$page."頁,每頁10個(gè)記錄,總".$rows."條記錄,一共".$pages."頁";//顯示頁數(shù)信息
//計(jì)算偏移量
$offset=$pagesize*($page-1);
//構(gòu)造sql語句
$sqlx="select * from userinfo limit 10 offset ".$offset;
$result=mysql_query($sqlx);//執(zhí)行查詢操作
$ok=mysql_fetch_array($result);
while($ok)
{
?
tr
td bgcolor="#DEB887"?php echo $ok[0] ?/td
td?php echo $ok[1] ?/td
td?php echo $ok[2] ?/td
td?php echo $ok[3]==male?"男":"女" ?/td
td?php echo $ok[4] ?/td
td?php echo $ok[5] ?/td
tda href="updateInfo.php?userid=?php echo $ok[0] ?"修改/a
a href="deleteInfo.php?userid=?php echo $ok[0] ?"
onclick="return confirmDel();"刪除/a
/td
/tr
?php
$ok=mysql_fetch_array($result);
}
?
/table
table
?php
//判斷當(dāng)前是否是第一頁,不是,則顯示'第一頁'和'上一頁'
if($page!=1)
{
?
tr
td align="center"
a href="pageSelect.php?ToPage=1"第一頁/a
a href="pageSelect.php?ToPage=?php echo ($page-1) ?"上一頁/a
/td
?php
}
//如果不是最后一頁,則顯示‘最后一頁’和‘下一頁’
if($page!=$pages)
{
?
td align="center" colspan="6"
a href="pageSelect.php?ToPage=?php echo ($page+1) ?"下一頁/a
a href="pageSelect.php?ToPage=?php echo ($pages) ?"最后一頁/a
/td
?php
}
?
table
form action="pageSelect.php" method="get" name="form1"
tr
td colspan="6" align="center"
input type="text" value="?php echo ($page) ?" name="ToPage"
size="3" /
a href="javascript:window.document.form1.submit();"GO/a
/td
/tr
/form
/table
/center
/body
/html
因?yàn)樵邳c(diǎn)擊分頁鏈接時(shí)表單數(shù)據(jù)不會(huì)傳遞會(huì)丟失而導(dǎo)致分頁鏈接無效 解決的方法有幾種。 第一種是用網(wǎng)站管理軟件把搜索結(jié)果生成靜態(tài)頁面并保存一段時(shí)間。 第二種是考慮用session傳遞搜索信息。 當(dāng)搜索信息表單提交并驗(yàn)證之后開啟session. session_start(); $_SESSION[keywords] = $X; $_SESSION[searchscope] = $Y; ... //賦值搜索信息。關(guān)鍵字、搜索范圍等等 在搜索結(jié)果頁面開啟session得到搜索信息再提交就行了 session_start(); $keywords=$_SESSION[keywords]; $searchscope$_SESSION[searchscope]; 第三種是用數(shù)據(jù)庫存儲(chǔ)搜索信息。
具體代碼如下:
/**
* 獲取分頁的HTML內(nèi)容
* @param integer $page 當(dāng)前頁
* @param integer $pages 總頁數(shù)
* @param string $url 跳轉(zhuǎn)url地址 最后的頁數(shù)以 'page=x' 追加在url后面
*
* @return string HTML內(nèi)容;
*/
public static function getPageHtml($page, $pages, $url){
//最多顯示多少個(gè)頁碼
$_pageNum = 5;
//當(dāng)前頁面小于1 則為1
$page = $page1?1:$page;
//當(dāng)前頁大于總頁數(shù) 則為總頁數(shù)
$page = $page $pages ? $pages : $page;
//頁數(shù)小當(dāng)前頁 則為當(dāng)前頁
$pages = $pages $page ? $page : $pages;
//計(jì)算開始頁
$_start = $page - floor($_pageNum/2);
$_start = $_start1 ? 1 : $_start;
//計(jì)算結(jié)束頁
$_end = $page + floor($_pageNum/2);
$_end = $_end$pages? $pages : $_end;
//當(dāng)前顯示的頁碼個(gè)數(shù)不夠最大頁碼數(shù),在進(jìn)行左右調(diào)整
$_curPageNum = $_end-$_start+1;
//左調(diào)整
if($_curPageNum$_pageNum $_start1){
$_start = $_start - ($_pageNum-$_curPageNum);
$_start = $_start1 ? 1 : $_start;
$_curPageNum = $_end-$_start+1;
}
//右邊調(diào)整
if($_curPageNum$_pageNum $_end$pages){
$_end = $_end + ($_pageNum-$_curPageNum);
$_end = $_end$pages? $pages : $_end;
}
$_pageHtml = 'ul class="pagination"';
/*if($_start == 1){
$_pageHtml .= 'lia title="第一頁"?/a/li';
}else{
$_pageHtml .= 'lia title="第一頁" href="'.$url.'page=1"?/a/li';
}*/
if($page1){
$_pageHtml .= 'lia title="上一頁" href="'.$url.'page='.($page-1).'"?/a/li';
}
for ($i = $_start; $i = $_end; $i++) {
if($i == $page){
$_pageHtml .= 'li class="active"a'.$i.'/a/li';
}else{
$_pageHtml .= 'lia href="'.$url.'page='.$i.'"'.$i.'/a/li';
}
}
/*if($_end == $pages){
$_pageHtml .= 'lia title="最后一頁"?/a/li';
}else{
$_pageHtml .= 'lia title="最后一頁" href="'.$url.'page='.$pages.'"?/a/li';
}*/
if($page$_end){
$_pageHtml .= 'lia title="下一頁" href="'.$url.'page='.($page+1).'"?/a/li';
}
$_pageHtml .= '/ul';
echo $_pageHtml;
}