Magic Pagination
The MagicPagination is a tool which help you to split large result sets over multiple pages.
The only thing that you must to do is to follow the next pattern:
<?php
…
$paginationObj = new pagination(total_limit);
$limit = $paginationObj->paginationGetLimit();
mysql query(variable $limit goes here)
…
$paginationObj->paginationCreatePages();
…
?>
Default values
total_limit:500
results per page:30
Number of pagination links:5
Note: works only with dynamic urls.(http://www.example.com/script.php?page=num or script.php?var=something&page=num etc)
Code:
<?php class pagination { //----------------------------------------------------------------------------------------------------------------------- private $max_rows = 30;//MAXIMUM NUMBER OF DISPLAYING ITEMS private $max_num = 5;//MAXIMUM NUMBER OF NUMERIC LINKS private $limit; private $maxId;//TOTAL NUMBER OF ITEMS private $lastpage; private $page; private $url; private $match = "page="; //------------------------------------------------------------------------------------------------------------------------ public function __construct($maxId = null) { if(!$maxId) { $this->maxId = 500; } else { $this->maxId = $maxId; } } //-------------------------------------------------------GET CURRENT PAGE------------------------------------------------------- public function getPage() { return $this->page; } //--------------------------------------------------------PAGINATION UP DIVISION------------------------------------------------ public function paginationGetLimit() { $this->page = isset($_GET['page']) ? strip_tags($_GET['page']) : 1; $this->lastpage = ceil($this->maxId / $this->max_rows); $this->page = (int)$this->page;
if($this->page < 1)
{
$this->page = 1;
}
elseif($this->page > $this->lastpage)
{
$this->page = $this->lastpage;
}
return ($this->limit = 'LIMIT ' .($this->page - 1) * $this->max_rows .',' .$this->max_rows); } //-----------------------------------------------------PAGINATION DOWN DIVISION SIMPLE PAGES------------------------------------- public function paginationCreatePages() { //......................................................... $this->url = $_SERVER['REQUEST_URI'];//THE REQUESTED URL $pos = strpos($this->url, $this->match); //......................................................... echo "<div class='pagination'>"; echo "<ul>"; //NEXT ENTRIES if ($this->page == 1) { //do nothing } else { $prevpage = $this->page-1;
if($pos != '')
{
$nextUrl = str_replace($this->match.$this->page, $this->match.$prevpage, $this->url);
echo "<li>";
echo "<a href='".$nextUrl."'>«</a>";
echo "</li> ";
}
else
{
print "The document can not create pages";
return;
}
}
//MIDDLE PAGES
if($this->lastpage != 1)
{
$max_links = $this->max_num + 1;
$h = 1;
if($this->page > $max_links)
{
$h = (($h + $this->page) - $max_links);
}
if($this->page >= 1)
{
$max_links = $max_links + ($this->page-1);
}
if($max_links > $this->lastpage)
{
$max_links = $this->lastpage + 1;
}
for($i=$h; $i<$max_links; $i++)
{
if ($i == $this->page)
{
echo "<li id='f'>";
echo $i;
echo "</li>";
}
else
{
if($pos == '')
{
if(strpos($this->url, '?') != '')
{
$specialChar = "&";
}
else
{
$specialChar = "?";
}
$currentUrl = $this->url.$specialChar.$this->match.$i;
}
else
{
$currentUrl = str_replace($this->match.$this->page, $this->match.$i, $this->url);
}
echo "<li>";
echo "<a href='".$currentUrl."'>$i</a>";
echo "</li> ";
}
}
}
//PREVIOUS ENTRIES
if ($this->page == $this->lastpage)
{
//do nothing
}
else
{
$nextpage = $this->page + 1;
if($pos == '')
{
if(strpos($this->url, '?') != '')
{
$specialChar = "&";
}
else
{
$specialChar = "?";
}
$prevUrl = $this->url.$specialChar.$this->match.$nextpage;
}
else
{
$prevUrl = str_replace($this->match.$this->page, $this->match.$nextpage, $this->url);
}
echo "<li>";
echo "<a href='".$prevUrl."'>»</a>";
echo "</li> ";
}
//-------------------------------------------------------------------------------
echo "</ul>";
echo "</div>";
}
//--------------------------------------------------------------------------------------------
}
?>
ccs code:
/* CSS Document */
.pagination
{
width:100%;
margin-top:20px;
margin-left:10px;
clear:left
}
.pagination ul
{
list-style-type: none;
margin:0;
padding:0;
}
.pagination ul li
{
color:#666666;
float:left;
font: Eras Bold ITC;
font-size: 12px;
letter-spacing: .01em;
}
.pagination ul li a
{
color: #47809E;
display: block;
margin: 0 0.1em;
padding: 2px;
padding-left: 4px;
padding-right: 4px;
text-decoration: none;
}
li#f
{
background-color:#fff;
display: block;
margin: 0 0.1em;
padding: 2px;
padding-left: 4px;
padding-right: 4px;
text-decoration: none;
color:#666666;
}
.pagination ul li a:hover
{
text-decoration:underline;
}
