咨询电话:186 7916 6165 咨询电话:186 7916 6165 (微信同号)    在线QQ:181796286
NEWS BLOG ·
学无止境
关注开优网络 关注前沿
PHP自定义验证码
PHP显示会员注册IP地理位置

PHP自定义分页类

发表日期:2015-10-30    文章编辑:南昌开优网络    浏览次数:4514    标签:PHP应用

<?php
/**
** lino的通用php分页类。(仿Google样式)
** 只需提供记录总数与每页显示数两个参数。(已附详细使用说明.....)
** 无需指定URL,链接由程序生成。方便用于检索结果分页。

**/

class Pager{
var $url;
var $countall;
var $page;
var $thestr;
var $backstr;
var $nextstr;
var $pg;
//构造函数,实例化该类的时候自动执行该函数
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;
}
//记录数与每页显示数不能整队时,页数取余后加1
$this->countall = $countall;
if ($this->countall%$countlist!=0){
$this->page=sprintf("%d",$this->countall/$countlist)+1;
}
else{
$this->page=$this->countall/$countlist;
}

//得到当前的URL。具体实现请看最底部的函数实体
$this->url = Pager::getUrl();

//生成12345等数字形式的分页。
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."页");
}
//生成数字分页的辅助函数
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>";
}
}
//生成上一页等信息的函数
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="";
}

}
//生成下一页等信息的函数
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; 
} 
}
?>


调用:PHP部分
require 'includes/page.inc.php'; //引用上面的分页

$pg = @$_REQUEST["pg"]; //接收当前的页码。

$pg = @ $_REQUEST["pg"]; //接收当前的页码。

$pagelist = 10; //设定每页显示10条记录

$limitFrom = 0; //开始limit的数,用于当前pg(即页码)小于2的场合。此时sql的语句为..... limit 0,10

if (!isset ($pg) || $pg < 0 || !is_numeric($pg)) { //当请求的页码不存在或小于0或者不是数字时
$pg = 1; //把页码设定为第一页
}else {
$pg=intval($pg);  //取整数。当传入的值为1.2/1.3时取整
}

$_nuw = "select count(*) as total from user";  //求和的sql 语句

$res = mysql_fetch_assoc(_query($_nuw));  //以数组的形式显示sql

$countAll = $res['total'];  //定义总和的变量

if($countAll==0){   //当总和为0时 页码就为1
$_pageabsolute = 1;
}else {  
$_pageabsolute=ceil($countAll / $pagelist); //否则就是总数除以页大小再进一取整
}
if($pg>$_pageabsolute){//当请求的页码大于总的页数时就等于最大页数
$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部分调用
<?php while ($_rows=mysql_fetch_assoc($_rs)){?>//采用while语句循环查询出来的结果集
<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">发短信</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>