<?php /** ** lino的通用php分頁類。(仿Google樣式) ** 只需提供記錄總數(shù)與每頁顯示數(shù)兩個參數(shù)。(已附詳細使用說明.....) ** 無需指定URL,鏈接由程序生成。方便用于檢索結果分頁。 **/ class Pager{ var $url; var $countall; var $page; var $thestr; var $backstr; var $nextstr; var $pg; //構造函數(shù),實例化該類的時候自動執(zhí)行該函數(shù) function Pager($countall,$countlist){ @$this->pg=sprintf("%d",$_GET["pg"]); //保證pg在未指定的情況下為從第1頁開始 if ($this->pg==0){ $this->pg=1; } if (!isset($this->pg)){ $this->pg=1; } //記錄數(shù)與每頁顯示數(shù)不能整隊時,頁數(shù)取余后加1 $this->countall = $countall; if ($this->countall%$countlist!=0){ $this->page=sprintf("%d",$this->countall/$countlist)+1; } else{ $this->page=$this->countall/$countlist; } //得到當前的URL。具體實現(xiàn)請看最底部的函數(shù)實體 $this->url = Pager::getUrl(); //生成12345等數(shù)字形式的分頁。 if ($this->page<=10){ for ($i=1;$i<$this->page+1;$i++){ $this->thestr=$this->thestr.Pager::makepg($i,$this->pg); } } else{ if ($this->pg<=5){ for ($i=1;$i<10;$i++){ $this->thestr=$this->thestr.Pager::makepg($i,$this->pg); } } else{ if (6+$this->pg<=$this->page){ for ($i=$this->pg-4;$i<$this->pg+6;$i++){ $this->thestr=$this->thestr.Pager::makepg($i,$this->pg); } } else{ for ($i=$this->pg-4;$i<$this->page+1;$i++){ $this->thestr=$this->thestr.Pager::makepg($i,$this->pg); } } } } //生成上頁下頁等文字鏈接 $this->backstr = Pager::gotoback($this->pg); $this->nextstr = Pager::gotonext($this->pg,$this->page); echo ($this->backstr.$this->thestr.$this->nextstr." 共".$this->countall." 條,每頁".$countlist."條,分".$this->page."頁"); } //生成數(shù)字分頁的輔助函數(shù) function makepg($i,$pg){ if ($i==$pg){ return " <font color=red><b>".$i."</b></font>"; } else{ return " <a href=".Pager::replacepg($this->url,5,$i).">".$i."</a>"; } } //生成上一頁等信息的函數(shù) function gotoback($pg){ if ($pg-1>0){ return $this->gotoback=" <a href=".Pager::replacepg($this->url,3,0).">首頁</a> <a href=".Pager::replacepg($this->url,2,0).">上頁</a>"; } else{ return $this->gotoback=""; } } //生成下一頁等信息的函數(shù) function gotonext($pg,$page){ if ($pg < $page){ return " <a href=".Pager::replacepg($this->url,1,0).">下頁</a> <a href=".Pager::replacepg($this->url,4,0).">尾頁</a>"; } else{ return ""; } } //處理url中$pg的方法,用于自動生成pg=x function replacepg($url,$flag,$i){ if ($flag == 1){ $temp_pg = $this->pg; return str_replace("pg=".$temp_pg,"pg=".($this->pg+1),$url); } else if($flag == 2) { $temp_pg = $this->pg; return str_replace("pg=".$temp_pg,"pg=".($this->pg-1),$url); } else if($flag == 3) { $temp_pg = $this->pg; return str_replace("pg=".$temp_pg,"pg=1",$url); } else if($flag == 4){ $temp_pg = $this->pg; return str_replace("pg=".$temp_pg,"pg=".$this->page,$url); } else if($flag == 5){ $temp_pg = $this->pg; return str_replace("pg=".$temp_pg,"pg=".$i,$url); } else{ return $url; } } //獲得當前URL的方法 function getUrl(){ $url="http://".$_SERVER["HTTP_HOST"]; if(isset($_SERVER["REQUEST_URI"])){ $url.=$_SERVER["REQUEST_URI"]; } else{ $url.=$_SERVER["PHP_SELF"]; if(!empty($_SERVER["QUERY_STRING"])){ $url.="?".$_SERVER["QUERY_STRING"]; } } //在當前的URL里加入pg=x字樣 if (!ereg("(pg=|PG=|pG=|Pg=)", $url)){ if (!strpos($url,"?")){ $url = $url."?pg=1"; } else{ $url = $url."&pg=1"; } } return $url; } } ?> 調(diào)用:PHP部分 require 'includes/page.inc.php'; //引用上面的分頁 $pg = @$_REQUEST["pg"]; //接收當前的頁碼。 $pg = @ $_REQUEST["pg"]; //接收當前的頁碼。 $pagelist = 10; //設定每頁顯示10條記錄 $limitFrom = 0; //開始limit的數(shù),用于當前pg(即頁碼)小于2的場合。此時sql的語句為..... limit 0,10 if (!isset ($pg) || $pg < 0 || !is_numeric($pg)) { //當請求的頁碼不存在或小于0或者不是數(shù)字時 $pg = 1; //把頁碼設定為第一頁 }else { $pg=intval($pg); //取整數(shù)。當傳入的值為1.2/1.3時取整 } $_nuw = "select count(*) as total from user"; //求和的sql 語句 $res = mysql_fetch_assoc(_query($_nuw)); //以數(shù)組的形式顯示sql $countAll = $res['total']; //定義總和的變量 if($countAll==0){ //當總和為0時 頁碼就為1 $_pageabsolute = 1; }else { $_pageabsolute=ceil($countAll / $pagelist); //否則就是總數(shù)除以頁大小再進一取整 } if($pg>$_pageabsolute){//當請求的頁碼大于總的頁數(shù)時就等于最大頁數(shù) $pg=$_pageabsolute; } if ($pg > 1) { //當頁碼大于1 的時候,需要設定limitFrom。此時sql可能為 limit 30,10 $limitFrom = $pagelist * ($pg -1); //這是個計算limitFrom小算法,仔細看看就能明白了。 } else { $limitFrom = 0; } $_result = "SELECT username,sex,face FROM user ORDER BY id desc LIMIT " . $limitFrom . "," . $pagelist; //sql語句傳limit 和頁大小 $_rs=_query($_result); //返回查詢出來的結果集 html部分調(diào)用 <?php while ($_rows=mysql_fetch_assoc($_rs)){?>//采用while語句循環(huán)查詢出來的結果集 <dl> <dd class="user"><?php echo $_rows['username'].($_rows['sex'])?></dd> <dt><img src="<?php echo $_rows['face']?>" alt="<?php echo $_rows['username']?>"></dt> <dd class="message">發(fā)短信</dd> <dd class="friend">加為好友</dd> <dd class="guest">寫留言</dd> <dd class="flower">給他送花</dd> </dl> <?php }?> //顯示分頁 <div class="digg"><?php $pager = new Pager($countAll,$pagelist);?></div>