This is a simple standalone result set pager class.. Im still learning OOP 🙂
<?php
class pager
{
var $page;
var $perPage;
var $total;
var $totalPages;
var $limitvalue;
function pager(&$page, &$perpage)
{
$this->page = &$page;
$this->perPage = &$perpage;
}
function setTotalPages(&$count)
{
$cnt = &$count;
$this->totalPages = ceil($cnt/$this->perPage);
return $this->totalPages;
}
function generateNavs()
{
$pagenav = '';
$qs = $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; // Identify URL & query string
$qs = eregi_replace('\&p=([^]]*)', '', $qs); //Kill any p= in the query string....
//Determine Page
if ($this->page == '')
{
$p = 1;
$this->limitvalue = 0;
}
else
{
if ($this->page == 'last')
{
$p = $totalPages;
$this->limitvalue = $p * $this->perPage - ($this->perPage);
}
else
{
$p = $this->page;
$this->limitvalue = $p * $this->perPage - ($this->perPage);
}
}
//Generate PREV navs
if ($p > 1)
{
$pagenum = $p - 1;
$pagenav .= "<a href='$qs&p=$pagenum'>Prev</a> ";
}
//Page Numbers
if ($this->totalPages > 1)
{
for($i = 1; $i <= $this->totalPages; $i++)
{
if($i == $p)
{
$pagenav .= "[{$i}] ";
}
else
{
$pagenav .= "<a href='$qs&p=$i'>$i</a> ";
}
}
}
//Generate NEXT nav
if ($p < $this->totalPages)
{
$pagenum = $p + 1;
$pagenav .= "<a href='$qs&p=$pagenum'>Next</a>";
}
return $pagenav;
}
function getLimit()
{
return $this->limitvalue;
}
function getPerPage()
{
return $this->perPage;
}
}
?>
Generic Usage:
<?php
$result = mysql_query("SELECT id FROM someTable WHERE...")//Query number of rows in result set...
$total = mysql_num_rows($result); //Num of rows
$perPage = '10'; //Set this for how many rows per page to display
$pager = & new pager($_GET['p'], $perPage); //new pager object
$totalpages = $pager->setTotalPages($total); //Calculates pages
$navs = $pager->generateNavs(); //Generates Navs
$pagedResults = mysql_query("SELECT
id
FROM
someTable
WHERE
blah
LIMIT
$pager->getLimit(), $pager->perPage()
"); //Does the query for display etc...
while (// loop result set
{
//blah
}
echo $navs; //Echo Navs
?>
Works well for me, any thoughts??? 🙂