記錄一個我改裝的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;
}


}
?>

發佈了161 篇原創文章 · 獲贊 11 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章