Pagenation using PHP ClassCrate Database table
CREATE TABLE `countries` (
`ID` smallint(5) unsigned NOT NULL auto_increment,
`Country` varchar(255) NOT NULL,
`CountryAbbrev` varchar(10) default NULL,
`CurrencyAbbr` varchar(4) default NULL,
`CurrencyRate` float default NULL,
`CurrencyCode` varchar(3) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=289 DEFAULT CHARSET=latin1;
Download table countries
index.php
<?php
require_once('Pagination.class.php');
$row_per_page = 20;
$pagination = new CompletePagination($row_per_page);
$link = mysql_connect('localhost', 'root', '');
mysql_selectdb('test');
$where = "";
if(isset($_POST['txt_name']))
$where = " WHERE Country LIKE '%{$_POST['txt_name']}%'";
else if(isset($_GET['txt_name']) && isset($_GET['page_no']))
$where = " WHERE Country LIKE '%{$_GET['txt_name']}%'";
$query_count = "SELECT COUNT(Country) AS tot_rec FROM countries ".$where;
$result_count = mysql_query($query_count);
$record_count = mysql_fetch_array($result_count);
$total_rec = $record_count['tot_rec'];
$pagination->total_rows = $total_rec;
$pagination->show_dropdown = true;
$pagination->show_total_records = true;
$pagination->show_page_no = true;
$pagination->show_ellipsis = 20; //Show Ellipsis if total Pages are greater than or eqaul to 100
$pagination_html = $pagination->showCompletePagination();
$pagination->show_ellipsis = 10;
$pagination->show_dropdown = false;
$pagination->show_total_records = false;
$pagination->show_page_no = false;
$pagination_html2 = $pagination->showCompletePagination();
$query = "SELECT Country, CountryAbbrev, CurrencyAbbr FROM countries ".$where." LIMIT ".$pagination->getLimit() . ", " . $row_per_page;
$result = mysql_query($query);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pagination</title>
<link rel="stylesheet" type="text/css" href="completepagination.css" />
</head>
<body>
<div align="center">
<?php echo $pagination_html; ?>
<form method="post" action="">
Country Name: <input type="text" name="txt_name" value="<?php echo @$_REQUEST['txt_name'];?>" />
<input type="submit" value="Submit" />
</form>
<table border="1" cellpadding="2" cellspacing="2">
<thead>
<tr>
<th>Country</th>
<th>Country Abb</th>
<th>Currency Abb</th>
</tr>
</thead>
<tbody>
<?php
while($record = mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $record['Country'];?></td>
<td><?php echo $record['CountryAbbrev'];?></td>
<td><?php echo $record['CurrencyAbbr'];?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php echo $pagination_html2;?>
</div>
</body>
</html>
Pagination.class.php
<?php
class CompletePagination
{
private $rows_per_page;
private $url;
private $page_no;
public $total_rows;
public $show_dropdown;
public $show_total_records;
public $show_page_no;
public $show_ellipsis = 9; //Show ... if total pages are more than 10
/**
*
* @param int $rperpage - show the record per page
* @param int $totrows - total records
*/
public function __construct($rperpage, $totrows = "")
{
$this->rows_per_page = $rperpage;
$this->total_rows = $totrows;
$this->setPageNumber();
$this->generateCompleteURL();
}
/**
* function sets the pageNumber
*/
private function setPageNumber()
{
if($_POST)
$this->page_no = 1;
else
{
if (!isset($_REQUEST['page_no']) && @$_REQUEST['page_no'] == "")
$this->page_no = 1;
else
$this->page_no = $_REQUEST['page_no'];
}
}
/**
* function gets the limit of pagination
* @return int
*/
public function getLimit()
{
return ($this->page_no - 1) * $this->rows_per_page;
}
/**
* This function generates the complete URL along with the query string
*/
private function generateCompleteURL()
{
$page_query = (count($_REQUEST) == 0 ? "page_no=" : "&page_no=");
if (isset($_REQUEST['page_no']))
unset($_REQUEST['page_no']);
$this->url = $_SERVER['PHP_SELF'] . "?" . http_build_query($_REQUEST) . $page_query;
}
/**
* function returns the last page, that is generates as the result of Pagination
* @return int
*/
private function getLastPage()
{
return ceil($this->total_rows / $this->rows_per_page);
}
/**
* function generates the DropDown for Pagination
* @return string
*/
private function generateDropdown()
{
if ($this->total_rows == 0)
return "";
$str = "";
$str .= '<select name="drp_page_no" id="drp_page_no" onchange="document.location.href = this.value;">';
for ($cnt = 1; $cnt <= $this->getLastPage(); $cnt++)
{
if (isset($this->page_no) && $this->page_no == $cnt)
$str .= '<option value="' . $this->url . $cnt . '" selected="selected">' . $cnt . '</option>';
else
$str .= '<option value="' . $this->url . $cnt . '">' . $cnt . '</option>';
}
$str .= '</select>';
return $str;
}
/**
* function generates the complete pagination
* @return string
*/
public function showCompletePagination()
{
$pagination = "";
$lpm1 = $this->getLastPage() - 1;
$page = $this->page_no;
$prev = $this->page_no - 1;
$next = $this->page_no + 1;
$pagination .= "<div class=\"pagination\"";
if (@$margin || @$padding)
{
$pagination .= " style=\"";
if ($margin)
$pagination .= "margin: $margin;";
if ($padding)
$pagination .= "padding: $padding;";
$pagination .= "\"";
}
if ($this->show_total_records)
$pagination .= "><span class='tableStandardBold' style='margin-right:50px;'> Total Number of record(s) found: " . $this->total_rows . " </span>";
else
$pagination .= ">";
if ($this->getLastPage() > 1)
{
if ($page > 1)
{
$pagination .= "<a href={$this->url}1>« first</a>";
$pagination .= "<a href=$this->url$prev>‹ prev</a>";
}
else
{
$pagination .= "<span class=\"disabled\">« first</span>";
$pagination .= "<span class=\"disabled\">‹ prev</span>";
}
if ($this->getLastPage() < $this->show_ellipsis)
{
for ($counter = 1; $counter <= $this->getLastPage(); $counter++)
{
if ($counter == $page)
$pagination .= "<span class=\"current\">" . $counter . "</span>";
else
$pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
}
}
elseif ($this->getLastPage() >= $this->show_ellipsis)
{
if ($page < 4)
{
for ($counter = 1; $counter < 6; $counter++)
{
if ($counter == $page)
$pagination .= "<span class=\"current\">" . $counter . "</span>";
else
$pagination .= "<a href=\"$this->url$counter\">" . $counter . "</a>";
}
$pagination .= "...";
$pagination .= "<a href=$this->url$lpm1>" . $lpm1 . "</a>";
$pagination .= "<a href={$this->url}{$this->getLastPage()}>" . $this->getLastPage() . "</a>";
}
elseif ($this->getLastPage() - 3 > $page && $page > 1)
{
$pagination .= "<a href={$this->url}1>1</a>";
$pagination .= "<a href={$this->url}2>2</a>";
$pagination .= "...";
for ($counter = $page - 1; $counter <= $page + 1; $counter++) {
if ($counter == $page)
$pagination .= "<span class=\"current\">" . $counter . "</span>";
else
$pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
}
$pagination .= "...";
$pagination .= "<a href=$this->url$lpm1>$lpm1</a>";
$pagination .= "<a href={$this->url}{$this->getLastPage()}>" . $this->getLastPage() . "</a>";
}
else
{
$pagination .= "<a href={$this->url}1>1</a>";
$pagination .= "<a href={$this->url}2>2</a>";
$pagination .= "...";
for ($counter = $this->getLastPage() - 4; $counter <= $this->getLastPage(); $counter++)
{
if ($counter == $page)
$pagination .= "<span class=\"current\">" . $counter . "</span>";
else
$pagination .= "<a href=$this->url$counter>" . $counter . "</a>";
}
}
}
if ($page < $counter - 1)
{
$pagination .= "<a href=$this->url$next>next ›</a>";
$pagination .= "<a href={$this->url}{$this->getLastPage()}>last »</a>";
}
else
{
$pagination .= "<span class=\"disabled\">next ›</span>";
$pagination .= "<span class=\"disabled\">last »</span>";
}
if ($this->show_dropdown)
$pagination .= "<span class='tableStandardBold' style='margin-left:20px;'>Go to page: " . $this->generateDropdown() . "</span>\n";
if ($this->show_page_no)
{
$page = 1;
if (isset($this->page_no) && $this->page_no != "")
$page = $this->page_no;
$pagination .= "<span class='tableStandardBold' style='margin-left:20px;'> Page " . $page . " of " . $this->getLastPage() . "</span>\n";
}
$pagination .= "</div>\n";
}
return $pagination;
}
}
?>