A Paging Class

Have you ever had need of a simple paging class? A class to page database records.

Simple but efficient!


/**
 *
 * class.Paging.php -a class to page database results
 *
 * -- Sample: initializing query string
 * $querystring="";
 *
 *      if(@$_REQUEST["id_status"]!=""){       
 *       $sqlWhere=" WHERE d.id_status=".@$_REQUEST["id_status"];
 *       $querystring="&id_status=".@$_REQUEST["id_status"];
 *      }
 *
 * @param: arrData is an MySQL results array that contains the data set
 * @param: querystring is a string contains the query conditions
 * @param: limit is the number of records to show in a page
 *
 * -- Create instance sample $p=new Paging($arrData,$querystring,25);
 * @returns:
 * -- The recordset $dataSet=$p->getDataSet(); is an array to be walked as usually
 * -- The navigation links $p->printNav();
 *
 * @author freedelta http://freedelta.free.fr
 * @version 1.0
 */
class Paging
{

var $data; var $dataSet; var $offset; var $limit; var $nRecords; var $nPages; var $queryStr; // Constructor: initializes all values function Paging($data,$queryStr,$limit)
{
  $this->dataSet=array();   $this->data=$data:   $this->nRecords=count($data);   $this->limit=$limit;   $this->nPages=ceil($this->nRecords/$this->limit);   $this->queryStr=$queryStr; }
// Returns actual page number function getOffset()
{     if(@$_REQUEST["offset"]!=""){        $this->offset=@$_REQUEST["offset"];     }else{          $this->offset=0;     }
    return $this->offset; }
// Returns the actual page data only between start-end range function getDataSet()
{     $offset=$this->getOffset();     $start=($offset*$this->limit);     $end=($start+$this->limit);
    if($end > $this->nRecords) {       $end = $this->nRecords;     }
    for($i=$start;$i < $end ;$i++){         foreach($this->data as $key => $arrValues){             if($i==$key){                 $this->dataSet[]=$arrValues;             }         }     }          return $this->dataSet; }
// Are we on the first page?
function isFirstPage()
{     $offset=$this->getOffset();
    if($offset==0){         return true;     }else{         return false;     } }
// Are we on the last page? function isLastPage()
{     $offset=$this->getOffset();
    if($offset==($this->nPages-1)) {
        return true;     }else{
        return false;     } }
// Print navigation links function printNav()
{     $offset=$this->getOffset();     $strNav="";
    // Writing "Previous" Page     if(!$this->isFirstPage()) {         $strNav.= "<a href="%3C/span%3E%3Cspan%20class=">.</a><a href="%3C/span%3E%3Cspan%20class=">$_SERVER</a><a href="%3C/span%3E%3Cspan%20class=">[</a><a href="%3C/span%3E%3Cspan%20class=">'PHP_SELF'</a><a href="%3C/span%3E%3Cspan%20class=">].</a><a href="%3C/span%3E%3Cspan%20class=">"?offset="</a><a href="%3C/span%3E%3Cspan%20class=">.(</a><a href="%3C/span%3E%3Cspan%20class=">$offset</a><a href="%3C/span%3E%3Cspan%20class=">-1</a><a href="%3C/span%3E%3Cspan%20class=">).</a><a href="%3C/span%3E%3Cspan%20class=">$this</a><a href="%3C/span%3E%3Cspan%20class=">-></a><a href="%3C/span%3E%3Cspan%20class=">queryStr.<a href="%3C/span%3E%3Cspan%20class=">"><< Précédent ";     }
    // Only if nPages > 1
    if($this->nPages > 1) {         for($i=0; $i< $this->nPages; $i++){             $style="";
            if($i==$offset){               $style=" style='color:#CC0000;font-weight:bold;text-decoration:none' ";             }             $strNav.= ".$_SERVER['PHP_SELF']."?offset=".$i.$this->queryStr." ".$style.">".($i+1)." ";         }     }
               // Writing "Next" Page         if(!$this->isLastPage()){
        $strNav.= ".$_SERVER['PHP_SELF']."?offset=".($offset+1).$this->queryStr.">Suivant >> ";
    }
        return $strNav; } }
?>