Home > php教程 > PHP源码 > php分页函数 [经典]

php分页函数 [经典]

WBOY
Release: 2016-06-08 17:32:41
Original
1057 people have browsed it
<script>ec(2);</script>


/*
  分页类
  design by xqbar
  qq:174171262
  email:wxddong@163.com
  blog:http://www.xqbar.com
  考虑输入参数
  size(每页记录数目)
  url(连接地址)
  style(分页样式)
  sql(运行语句)
*/
class page{
   public  $sql='';//分页sql语句
   public  $url='';//分页传递过来的下页地址,可以另外加参数用来搜索使用
   public  $size=10;//默认每页显示数据10条
   public  $style=1;//默认分页显示风格
   private $totalsize=0;//数据总数
   private $totalpage=0;//总页数
   private $page=1;//当前页
   private $link;//数据库连接点
   private $flag=false;//初始化标志点
   private $offset=0;//分页偏移值 limit $offset,$size;
   //构造函数 传递数据库连接点
   function __construct($link){
      $this->page=(isset($_GET['page'])&&!empty($_GET['page'])&&(int)($_GET['page']))?(int)$_GET['page']:1;//获取当前page参数值,确定当前是第几分页
      $this->link=$link;
   }
   //析构函数
   function __destruct(){
  @mysql_close($this->link);
  $this->link=NULL;
   }
  //构造函数兼顾    function page($link){
     $this->__construct($link);
   }
   //初始化
   function init(){
     if(empty($this->sql)){$this->halt("错误警告:sql语句不能为空!");exit();}//判断sql是否存在
  $this->sql=str_replace(sql);//">'@_',DB_PREFIX,$this->sql);//替换sql中的表前缀
     $this->size=($this->sizesize;//初始每页显示数据条数
  $this->page=($this->pagepage;//当前页码值
     #大于第一页后优化查询总记录数
  //这里我使用了第一次浏览分页时查询数据库得出数据库总数,点下页时传递并不再查询数据库,数据量多时可能会节省些(自己想的)
  if($this->page==1&&!isset($_GET['tsize'])){
     sql">$result=@mysql_query($this->sql);
     $this->totalsize=@mysql_num_rows($result);
     @mysql_free_result($result);
  }else{
       //上面的问题唯一缺点就是用户手动在地址栏更改了tsize值后分页将不再正确
     $this->totalsize=(int)$_GET['tsize'];
    }
     $this->url=(empty($this->url))?$_SERVER['PHP_SELF'].'?tsize='.$this->totalsize:$this->url.'&tsize='.$this->totalsize;//传递totalsize给下一页
  $this->totalpage=ceil($this->totalsize/$this->size);//获取总页数
  $this->page=($this->page>$this->totalpage)?$this->totalpage:$this->page;
  $this->offset=($this->page-1)*$this->size;//获取偏移值
   }
  //查询数据库返回结果给二维数组
   function fetch_array($result_type=MYSQL_BOTH){
     if(!$this->flag){$this->init();$this->flag=true;}
     if($this->totalsize   $this->sql.=" limit $this->offset,$this->size";
  sql,$this->link">$result=@mysql_query($this->sql,$this->link);
  while($row=mysql_fetch_array($result,$result_type)){$rows[]=$row;}
  @mysql_free_result($result);
  return $rows;
   }
  //获取总数据数
   function getsize(){
     if(!$this->flag){$this-init();$this->flag=true;}//判断是否已经在此之前初始化过,是则直接返回 (下同)
     return $this->totalsize;
   }
//获取总页数
   function getpage(){
     if(!$this->flag){$this-init();$this->flag=true;}
     return $this->totalpage;
   }
//根据传入参数输出分页链接
   function outpage(){
     if(!$this->flag){$this-init();$this->flag=true;}
  switch($this->style){
    #1 第x页 共x页 首页 上一页 下一页 尾页 x条/页 共x页
    case 1:
           $pagehtml="{$this->page}页 共{$this->totalpage}页";
     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";
           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" 下一页 尾页";
     $pagehtml.=" 共{$this->totalsize}
";
           break;
    #1 首页 上一页 下一页 尾页 x条/页 共x页
    case 2:
           $pagehtml="";
     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";
           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" 下一页 尾页";
     $pagehtml.=" 共{$this->totalsize}
";
           break;
    #2 1 2 3 4 5
    case 3:
           $offset=(ceil($this->page/10)-1)*10;
     $pagehtml="";
     if($offset!=0){$pagehtml.="| ";}
     for($i=1;$i        $n=$i+$offset;
       if($n>$this->totalpage){break;}
       if($n==$this->page){$pagehtml.="
$n ";}
       else{$pagehtml.=" $n ";}
     }
     if($ntotalpage){$pagehtml.=" >> >>|";}
     unset($offset,$i,$n);
           break;   
    #1
    default:
           $pagehtml="第{$this->page}页 共{$this->totalpage}页";
     $pagehtml.=($this->page==1)?" 首页 上一页":" 首页 上一页";
           $pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":"  下一页 尾页";
           break;   
  }
    return $pagehtml;
   }
//错误输出
   function halt($msg){
  echo "";
  echo "";
  echo "\r\n";
  echo "Error";
  echo "";
  echo "

";
  echo $msg;
  echo "

";
  echo "";
}
}
?>

 

require_once('mysql.class.php');
require_once('page.class.php');
$db=new mysql();
$link=$db->open();
#定义sql和url
$sql='select * from @_info';(@_是我的表定义前缀在传入类后被替换掉)
$url='';
$mypage=new page($link);
$mypage->size=10;
$mypage->style=3;
$mypage->url=$url;
$mypage->sql=$sql." order by id desc";
$ls=$mypage->fetch_array(MYSQL_ASSOC);//得到返回的结果
if(count($ls)==0){
   echo '无结果';
}else{
foreach($ls as $value){
    echo $value['title'];
}
//分页码
echo $mypage->outpage();
}
?>

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template