<?php
/*
*
* Пример использования:
*
* $pagination = new Pagination(10, 100, $_GET['p']);
* $query = "SELECT * FROM `users` ORDER BY `name` " . $pagination -> limit;
*
* $pagination -> printPages();
*/
class Pagination {
public $limit, $page, $pages;
/*
* Парметры:
* $elements - кол-во элементов на странице
* $total - всего записей, которые нужно разбить по страницам
* $p - текущая страница. Лучше всего получать из $_GET
*/
function __construct($elements, $total, $p) {
$pages = ceil($total / $elements);
if($p < 1) $p = 1;
if($p > $pages) $p = $pages;
$start = abs($p * $elements) - $elements;
$this -> limit = "LIMIT $start, $elements";
$this -> page = $p;
$this -> pages = $pages;
}
/* Выводим панель навигации по страничкам */
function printPages($params = '') {
$p = $this->page;
$pages = $this->pages;
echo '<div class="panelpage b_top">';
if(($p - 1) > 0) {
$prevPage = $p - 1;
echo "<a href=\"?p=$prevPage&$params\"> ← Предыдущая</a>";
}
if((($p + 1) <= $pages) and (($p - 1) > 0)) echo ' | ';
if(($p + 1) <= $pages) {
$nextPage = $p + 1;
echo "<a href=\"?p=$nextPage&$params\">Следующая → </a>";
}
echo '</div>';
echo '<div class="pagination block">';
if($p > 3) {
echo "<a href=\"?p=1&$params\">1</a> . ";
}
if(($p - 2) > 0) {
$pprevPage = $p - 2;
echo "<a href=\"?p=$pprevPage&$params\">$pprevPage</a>";
}
if(($p - 1) > 0) {
$prevPage = $p - 1;
echo "<a href=\"?p=$prevPage&$params\">$prevPage</a>";
}
echo '<span>' . $p . '</span>';
if(($p + 1) <= $pages) {
$nextPage = $p + 1;
echo "<a href=\"?p=$nextPage&$params\">$nextPage</a>";
}
if(($p + 2) <= $pages) {
$nnextPage = $p + 2;
echo "<a href=\"?p=$nnextPage&$params\">$nnextPage</a>";
}
if($p != $pages and $p != $pages - 1 and $p != $pages - 2) {
$endPage = $pages;
echo " . <a href=\"?p=$endPage&$params\">$endPage</a>";
}
echo '</div>';
}
}
?>