Класс pagination является инструментом, который позволит Вам разбивать большие наборы результатов на несколько страниц
<?php
…
$paginationObj = new pagination(total_limit);
$limit = $paginationObj->paginationGetLimit();
mysql query(variable $limit goes here)
…
$paginationObj->paginationCreatePages();
…
?>
Значения по умолчанию:
общий лимит (total_limit) = 500
результатов на странице = 30
страниц с номерами = 5
Примечание:
Работает только с динамическими url ввида: samplecode.ru/script.php?page=num или script.php?переменная=значение&страница=номер и т. п.
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;
}
}
public function getPage()
{
return $this->page;
}
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);
}
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>";
}
}
.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;
}