记录一个我改装的php的分页类

原文来自超越php 

特点:

1.包含显示函数

2.没有调用其他任何库,但是需要连接参数的全局变量,具体就是2个地方有调用

3.page参数错误会跳到index.php 

4.显示函数的输出格式还不支持模版,只是最简单的输出

5.还有很多可以改进的地方,以后改好再做记录

 

 

=======

使用举例:

$pageSize=20;
 
 $pageOption = array(
    "sql"=>$art->GetArticleBycateSql($cate),
    "PageSize"=>$pageSize,
    //"CurrentPageID"=>$currentPageId
   );
 $page = new Pager($pageOption);
 
 $ret = $page->getDataLink();
 $cateNews = array();
 while($row=mysql_fetch_array($ret,MYSQL_ASSOC)){
  $cateNews[]=$row;
 }

=======================

类原文

======================

<?php

// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
Class Pager
{
 var $PageSize;             //每页的数量
 var $CurrentPageID;        //当前的页数
 var $NextPageID;           //下一页
 var $PreviousPageID;       //上一页
 var $numPages;             //总页数
 var $numItems;             //总记录数
 var $isFirstPage;          //是否第一页
 var $isLastPage;           //是否最后一页
 var $sql;                  //sql查询语句

 function Pager($option)
 {
  global $DBHOST,$DBUSER,$DBPWD,$DBNAME;

   
  $this->_setOptions($option);

  //当前页数
  $this->CurrentPageID=$this->int_getCurrentPage('');
  if($this->CurrentPageID==-1)
  header('Location:index.php');
   
   
   
  // 总条数
  if ( !isset($this->numItems) )
  {
   $conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
   mysql_query("set names 'utf8'",$conn);
   $res= mysql_query($this->sql,$conn);

   $this->numItems = mysql_num_rows($res);
  }
  // 总页数
  if ( $this->numItems > 0 )
  {
   if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
   if ( $this->numItems % $this->PageSize )
   {
    $this->numPages= (int)($this->numItems / $this->PageSize) + 1;
   }
   else
   {
    $this->numPages = $this->numItems / $this->PageSize;
   }
  }
  else
  {
   $this->numPages = 0;
  }
   
  switch ( $this->CurrentPageID )
  {
   case $this->numPages == 1:
    $this->isFirstPage = true;
    $this->isLastPage = true;
    break;
   case 1:
    $this->isFirstPage = true;
    $this->isLastPage = false;
    break;
   case $this->numPages:
    $this->isFirstPage = false;
    $this->isLastPage = true;
    break;
   default:
    $this->isFirstPage = false;
    $this->isLastPage = false;
  }
   
  if ( $this->numPages > 1 )
  {
   if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
   if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
  }
   
  return true;
 }


 function _setOptions($option)
 {
  $allow_options = array(
                   'PageSize',
  // 'CurrentPageID',
                   'sql',
                   'numItems'
                   );

                   foreach ( $option as $key => $value )
                   {
                    if ( in_array($key, $allow_options) && ($value != null) )
                    {
                     $this->$key = $value;
                    }
                   }

                   return true;
 }


 //获取当前页是第几页,如果参数不合法,返回-1
 function int_getCurrentPage($strDetailUrl=''){
  if($strDetailUrl==''){
   $strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
  }

  $currentPageId=1;
  if(isset($_REQUEST['page'])){
   $currentPageId=$_REQUEST['page'];
   $currentPageId=trim($currentPageId);

   if(!preg_match('/^/d*$/',$currentPageId)){
   return -1;}
   else
   return $currentPageId;
 }

 return 1;
}
/***
 *
 * 返回结果集的数据库连接
 * 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
 * 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果
 * getPageData方法也是调用本方法来获取结果的
 *
 ***/

function getDataLink()
{
 if ( $this->numItems )
 {
  global $DBHOST,$DBUSER,$DBPWD,$DBNAME;

  $PageID = $this->CurrentPageID;

  $from = ($PageID - 1)*$this->PageSize;
  $count = $this->PageSize;
  $conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
  mysql_query("set names 'utf8'",$conn);
  $limitSql = $this->sql . " Limit ".$from ." , ".$count;

  //echo $limitSql;

  $link= mysql_query($limitSql,$conn);


  return $link;
 }
 else
 {
  return false;
 }
}

/***
 *
 * 以二维数组的格式返回结果集
 *
 ***/

function getPageData()
{
 if ( $this->numItems )
 {
  if ( $res = $this->getDataLink() )
  {
   if ( $res->numRows() )
   {
    while ( $row = mysql_fetch_array($res,MYSQL_ASSOC) )
    {
     $result[] = $row;
    }
   }
   else
   {
    $result = array();
   }
    
   return $result;
  }
  else
  {
   return false;
  }
 }
 else
 {
  return false;
 }
}

 

//帮url换新的页
function strSsetUrlNewPage($strUrl,$intNewPage){

 $param1 = '//&page=/d*/i';
 $param2='//?page=/d*/i';

 $strUrl = preg_replace($param1,'',$strUrl,1);
 $strUrl = preg_replace($param2,'',$strUrl,1);


 $det = '?';
 if(strpos($strUrl,'?'))
 $det='&';
 return $strUrl . $det . 'page=' . $intNewPage;
}


//上一页
function str_show_getpPage($strDetailUrl=''){
 if($strDetailUrl=='')
 $strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
 //echo $strDetailUrl;
 $ret = "";
 //上一页
 $pPage='上一页';
 if(!$this->isFirstPage){
  $newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->PreviousPageID);
  $ret .= '<a href='. $newUrl;
  $ret .='>'.$pPage.'</a>';
 }else{
  $ret .= $pPage;
 }
 return $ret;

}

//下一页
function str_show_getnPage($strDetailUrl=''){
 if($strDetailUrl=='')
 $strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
 $ret = "";

 $pPage='下一页';
 if($this->isLastPage==false){
  $newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->NextPageID);


  $ret .= '<a href='. $newUrl;
  $ret .='>'.$pPage.'</a>';
 }else{
  $ret .= $pPage;
 }
 return $ret;
}

 


//最后一页
function str_show_getLPage($strDetailUrl=''){
 if($strDetailUrl=='')
 $strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
 $ret = "";
 $pPage='最后一页';
  
 if($this->isLastPage){
  $ret .= $pPage;}
  else{
   $newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->numPages);
   $ret .= '<a href='. $newUrl;
   $ret .='>'.$pPage.'</a>';
  }


  return $ret;

}

 

//第一页
function str_show_getFPage($strDetailUrl=''){
 if($strDetailUrl=='')
 $strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
 $ret = "";
 $pPage='第一页';
 if($this->isFirstPage)
 $ret .= $pPage;
 else{
  $newUrl =$this->strSsetUrlNewPage($strDetailUrl,1);
  $ret .= '<a href='. $newUrl;
  $ret .='>'.$pPage.'</a>';
 }
  
 return $ret;
  
  
}

//分页信息
function str_show_getPageInfo(){
 $ret = "";
 $ret .= "共" . $this->numPages . '页';
 $ret .= '&nbsp;';
 $ret .= '当前为' . $this->CurrentPageID . '页';
 $ret .= '&nbsp;';
 $ret .= '共' . $this->numItems .'条数据';
 return $ret;
}

//获取一般情况下的分页显示
function str_show_GetPageNav($strDetailUrl='' ){
 $ret  = '';
 $ret .= $this->str_show_getFPage($strDetailUrl);
 $ret .= '&nbsp;';
 $ret .= $this->str_show_getpPage($strDetailUrl);
 $ret .= '&nbsp;';
 $ret .= $this->str_show_getnPage($strDetailUrl);
 $ret .= '&nbsp;';
 $ret .= $this->str_show_getLPage($strDetailUrl);
 $ret .= '&nbsp;';
 $ret .= $this->str_show_getPageInfo();
 return $ret;
}


}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值