<?
/**
* @desc A simple class for getting the LIMIT part of a query for paging
* The class needs 3 values : total rows, rows per page, page number to get results for (page number starts from 1)
* @author Eren Ezgü < eezgu at eezgu com >
* @version 0.1
* @example
$params = array('total_rows'=>40,'page_size'=>5,'page'=>6);
$pager = new QueryLimit($params);
if($limit_string = $pager->getLimitString() ){
// ...
mysql_query("SELECT * FROM `table` {$limit_string} ");
// ...
}
else{
// there is a problem
echo $pager->error;
}
*/
class QueryLimit{
var $error ='';
var $data = array(
'total_rows'=>0,
'page_size'=>10,
'page'=>1
);
var $limit_string = '';
var $limits = array(0,0);
var $total_pages = 0;
function QueryLimit($params=array()){
foreach($params as $param=>$val){
if(isset($this->data[$param])){
$this->data[$param] = intval($val);
}
}
$this->limits[1]=$this->data['page_size'];
}
function getLimitString(){
if($this->data['page_size']<1){
$this->error = 'Page size (rows per page) must be greater than 0';
return false;
}
$this->total_pages = ($this->data['total_rows']==0)?'1': ceil($this->data['total_rows']/$this->data['page_size']);
if($this->data['page']<1 || $this->data['page']>$this->total_pages){
$this->error = 'Invalid page number';
return false;
}
$this->limits[0] = $this->data['page_size']*($this->data['page']-1);
return ($this->limit_string = ' LIMIT '.implode(',',$this->limits).' ');
}
function getTotalPages(){
return $this->$total_pages;
}
function setPageSize($page_size){
$this->data['page_size']=intval($page_size);
}
function setPage($p){
$this->data['page']=intval($p);
}
function nextPage(){
$this->data['page']++;
}
function previousPage(){
$this->data['page']--;
}
}
?>
|