php 一个超强分页类的完整代码

前端之家收集整理的这篇文章主要介绍了php 一个超强分页类的完整代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧。
经测试代码如下:

<?PHP
/**
 * 超强分页类
 *
 * @param 
 * @arrange (512.笔记) jb51.cc
 **/
class paging{
 
 var $sql_results;
 var $sql_query;
 
 var $display_offset;
 var $display_limit;
 var $display_limit_URI;
 var $display_currentpage;
 var $display_totalpages;
 var $alt_content_count;
 
 var $display_offset_var;
 var $display_limit_var;
 
 var $display_mid_offset;
 var $display_link_first;
 var $display_link_prev;
 var $display_link_next;
 var $display_link_last;
 
 var $page_filename;
 var $page_uri;
 
 var $content;
 var $content_type;
 var $content_count;
 
 ## CONSTRUCTOR
 function paging($offsetVar='offset',$limit=10,$midOffset=2){
  $this->display_offset   = isset($_REQUEST[$offsetVar])?$_REQUEST[$offsetVar]:0;
  $this->display_limit   = is_numeric($limit)?$limit:10;
  $this->display_mid_offset  = $midOffset;
  $this->display_offset_var  = $offsetVar;
  $this->display_currentpage = ceil($this->display_offset / $this->display_limit);
 }
 
 ## HANDLE DATA
 function setContent($content){
  if( is_array($content) )
   $this->content_type = 'array';
 
  $this->content = $content;
  $this->private_contentDetails();
  $this->getLinks();
 }
 
 function private_contentDetails(){
  if( $this->content_type == 'array' )
   $this->content_count = count($this->content);
 }
 
 function getContent(){
  $returnAry = array();
  for(
   $i=$this->display_offset;
   $i< min( $this->content_count,$this->display_offset+$this->display_limit );
    ++$i
   )
   array_push($returnAry,$this->content[$i]);
 
  return $returnAry;
 }
 
 ## LINKS TO NAVIGATE
 function getLinks(){
  $this->getNextLink('');
  $this->getFirstLink('');
  $this->getLastLink('');
  $this->getPrevLink('');  
 }
 
 function getNext(){
  return $this->display_link_next;
 }
 
 function getPrev(){
  return $this->display_link_prev;
 }
 
 function getFirst(){
  return $this->display_link_first;
 }
 
 function getLast(){
  return $this->display_link_last;
 }
 
 function getNextLink($caption){
  // Check if we're counting content or the alternate user provided count
  if( $this->alt_content_count )
   $count = $this->alt_content_count;
  else
   $count = $this->content_count;
 
  if( $this->display_offset+$this->display_limit-$count >=0 ){
 
   $this->display_link_next = $this->display_offset;
  }else{
   $this->display_link_next = min(
     $count-1,$this->display_offset+$this->display_limit
     );
  }
  return $this->buildLink( $this->buildNewURI( $this->display_link_next),$caption );
 }
 
 function getPrevLink($caption){ 
  $this->display_link_prev = max(
    0,$this->display_offset-$this->display_limit
    );
  return $this->buildLink( $this->buildNewURI( $this->display_link_prev),$caption );
 }
 
 function getFirstLink($caption){
  $this->display_link_first = 0;
  return $this->buildLink( $this->buildNewURI( $this->display_link_first),$caption );
 }
 
 function getLastLink($caption){
  $this->display_link_last = $this->content_count-$this->display_limit;
  return $this->buildLink( $this->buildNewURI( $this->display_link_last),$caption );
 }
 
 ## NUMBERS
 function getPageCount(){
  if( $this->alt_content_count )
   $count = $this->alt_content_count;
  else
   $count = $this->content_count;
 
  $this->display_totalpages = ceil(
        $count / $this->display_limit
        );
  return $this->display_totalpages;
 }
 
 function getPageNumbers(){
 
  // define variables
  $midOffset  = $this->display_mid_offset;
  $firstLink  = $this->display_link_first;
  $pageCount  = $this->getPageCount();
  $thisPage  = $this->display_currentpage;
  $limit   = $this->display_limit;
  $displayed = $midOffset*2+1;
  $returnAry = array();
 
  // dots
  $returnAry['afterdot'] = '';
  $returnAry['beforedot'] = '';
 
 
  // if two times and center the number is less than all the pages together
  if( ($midOffset*2+1) < $pageCount ){
   $min = max($firstLink,$thisPage-$midOffset);
   $max = min($pageCount,$thisPage+$midOffset+1);
   $total = $max-$min;
 
   // this keeps x amount of pages displayed even if
   // you're not in mid cause of page 1 or 2
   if($total<$displayed){
 
    if($min==0){
     $max+=$displayed-$total;
    }
    if($max==$pageCount){
     $min-=$displayed-$total;
    }
   }
 
  }else{
   # Just output a set of numbers
   $min = 0;
   $max = $pageCount;
  }
 
  // run pages,check for current page and name it
  for($i=$min;$i<$max;++$i){
   $cp = 'no';
   if($thisPage==$i)
    $cp = 'yes';
 
   if($max!=$pageCount)
    $returnAry['afterdot'] = '...';
 
   if($min>0)
    $returnAry['beforedot'] = '...';
 
   array_push($returnAry,array(
       'currentPage' => $cp,'pageNumber' => ($i+1),'pageLink'  => $this->buildLink( $this->buildNewURI( ($i*$limit) ),($i+1) )
       )
      );     
  }
 
  return $returnAry;
 
 }
 
 function makePageNumbers($format,$pages,$boldCurrent=true,$separator=' '){
  $retPages = '';
 
 // make actual page numbers
  foreach($pages as $key => $value):
   if(is_numeric($key))
    $retPages .= ('yes'==$value['currentPage'] && $boldCurrent)?'<b>'.$value['pageLink'] .'</b>'.$separator:$value['pageLink'].$separator;
  endforeach;
 
  $format = str_replace( array('{beforedot}','{afterdot}','{pages}','{separator}'),array( $pages['beforedot'],$pages['afterdot'],$retPages),$format);
  return $format;
 }
 
 ## CHECKS
 function isFirstPage(){
  if($this->display_currentpage==0)
   return true;
  return false;
 }
 function isLastPage(){
  // add one because basis is 0,not 1
  if($this->display_currentpage+1==$this->getPageCount())
   return true;
  return false;
 }
 
 ## FUNCTIONS
 function getPageName(){
  $fileName = explode('/',$_SERVER['REQUEST_URI']);
  $fileName = $fileName[count($fileName)-1];
 
  if(strpos($fileName,'?')>0) {
   $fileName = explode('?',$fileName);
   $fileName = $fileName[0]; 
  }
 
  return $fileName;
 }
 
 function getCleanURI(){
  $URI = $_SERVER['REQUEST_URI'];
  if(strpos($URI,'?')>0){
   $URI = explode('?',$URI);
   $URI = $URI[1];
 
   $URI = preg_replace('/\b'.$this->display_offset_var.'\b[=0-9&]{2,20}/','',$URI);
   //$URI = preg_replace('/\b'.$this->display_limit_var.'\b[=0-9&]{2,$URI);
 
   return $URI;
  }
  return false;
 }
 
 function buildNewURI($offset){
  $newFile = $this->getPageName() . '?' . $this->getCleanURI();
 
  $lastChar = substr($newFile,strlen($newFile)-1,1);
  if( $lastChar != '&' && $lastChar != '?' )
   $newFile.='&';
 
  $newFile .= $this->display_offset_var.'='.$offset.'&';
  //$newFile .= $this->display_limit_var.'='.$limit.'&';
 
  return $newFile;
 }
 
 function buildLink( $href,$caption,$target=NULL ){
  if( $target != NULL )
   $target = ' target="'.$target.'"';
  return '<a href="'.$href.'"'.$target.'>'.$caption.'</a>';
 }
 
 function encodeURI($str){
  $salt = 'falaful';
  $str = strrev($salt.$str);
  return base64_encode($str);
 }
 
 function decodeURI($str){
  $salt = 'falaful';
  $str = strrev( base64_decode($str) );
  $str = substr( $str,strlen($salt),strlen($str) );
  return $str;
 }
 
 
 
 ##############
 #
 # These functions are for inputting a query for this
 # class to execute. The other functions will grab all
 # x amount of rows then truncate it. These functions will
 # only limit to whatever amount. This improves performance.
 # Reason is so you dont grab 1,000,000 rows when you want 3.
 #
 ##############
 
 function runWQuery($db,$statement,$table,$where=''){
 
  // get total rows
  $db->query( 'SELECT COUNT(*) AS count FROM '. $table . ' ' . $where );
  $db->movenext();
  $this->alt_content_count = $db->col['count'];
 
  // add limit to query
  $where .= ' LIMIT ' . $this->display_offset .','.$this->display_limit;
 
  // save query
  $this->sql_query = $statement . ' FROM ' . $table .' '. $where;
 
  // print query
  //echo $this->sql_query;
 
  // run query
  $db->query( $this->sql_query );
  $this->sql_results = array();
 
  // save results
  while($db->movenext()){
   array_push($this->sql_results,$db->col);
  }
 
  return $this->runQueryActions();
 }
 
 function runQueryActions(){
  $this->setContent( $this->sql_results );
 
  $pages = $this->getPageNumbers();
 
  // make actual page numbers
  $retPages = $this->makePageNumbers( '{beforedot} {pages} {afterdot}',true,' ' );
 
  // get new display
  return array(
     'content' => $this->sql_results,'pages'  => $retPages
     );
 }
}
 



/*** 来自:编程之家 jb51.cc(jb51.cc) ***/ 
?>
专门用户数据库查询分页显示PHP

猜你在找的PHP相关文章