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

内容摘要
这篇文章主要为大家详细介绍了php 一个超强分页类的完整代码,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:

<?php
/**
文章正文

这篇文章主要为大家详细介绍了php 一个超强分页类的完整代码,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记。经测试代码如下:

<?php
/**
 * 超强分页类
 *
 * @param 
 * @arrange (www.idcnote.com)
 **/
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,20}/','',$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}', $pages, true, ' ' );
 
  // get new display
  return array(
     'content' => $this->sql_results,
     'pages'  => $retPages
     );
 }
}
 



/*** 来自:php教程(www.idcnote.com) ***/ 
?>
专门用户数据库查询后分页显示的php类

注:关于php 一个超强分页类的完整代码的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!