$get = $_GET['page']; // текущя страница
$query_count = 200; // Колчество строк выбранных из таблицы
$limit_rows = 10; // Лимит строк, выбираемых из таблицы, на страницу, если 0 выводит все строки
$limit_slice = 11; // Лимит ссылок пагинатора на странице с учетом "Предыдущий" и "Следующий", если 0 выводит все ссылки
if ($query_count > $limit_rows){ // если коичество выбранных строк из БД $query_count больше $limit_rows
$paginator = new paginator($query_count, $limit_rows, $limit_slice); // Инициализируем пагинатор
$arr = $paginator->pageNav($get); // Получаем массив
$arr_count = count($arr); // Считаем количество элементов массива $i=0;
$page_link = '';
$query = '';
foreach($arr as $key => $val)
{
$i=++$i;
if ($get == $key){ // если текущая страница равна ключу
$query = 'SELECT `id` FROM `resource` LIMIT '.$val; // создаем запрос в БД
$page_link .= '<li>'.$key.'</li>'; // делаем строку "не сылкой"
}else{ // в других случаях создаем ссылки
if ($key != 1 and $i == 1){ // Если текщая позиция не начало
$page_link .= '<li><a href="./?page=1"> Начало </a></li>';
$page_link .= '<li><a href="./?page='.$key.'"> Предыдущий </a></li>';
}elseif ($i == $arr_count and $limit_slice == $arr_count){ // Если текщая позиция не конец
$page_link .= '<li><a href="./?page='.$key.'"> Следующий </a></li>';
$page_link .= '<li><a href="./?page='.$paginator->pageNavLast().'"> Конец </a></li>';
}else{ // в других случаях создаем просто ссылку
$page_link .= '<li><a href="./?page='.$key.'">'.$key.'</a></li>';
}
}
}
}else{
$query = 'SELECT `id` FROM `resource`';
}
}else{ // если коичество выбранных строк из БД $query_count меньше $limit_rows
$query = 'SELECT `id` FROM `resource`';
}
echo $query; // запрос в таблицу
if (!empty($page_link)) echo '<ul>'.$page_link.'</ul>'; // сформированый пагинатор
class paginator{
private $limit_rows;
private $total_rows;
private $limit_slice;
function __construct($total_rows=0, $limit_rows=0, $limit_slice=0){
$this->total_rows=$total_rows;
$this->limit_rows=$limit_rows;
$this->limit_slice=$limit_slice;
}
public function pageNavLast(){
if ($this->limit_rows != 0) {
if ( $this->limit_rows > $this->total_rows){
$total_page = 1;
}else{
$total_page = ceil($this->total_rows/$this->limit_rows); }
return $total_page;
}
}
public function pageNav($this_page=0){
if ($this->limit_rows != 0) {
if ( $this->limit_rows > $this->total_rows){
$total_page = 1;
}else{
$total_page = ceil($this->total_rows/$this->limit_rows); }
$i = 0;
$arr_page = '';
while(++$i <= $total_page)
{
$start = $i * $this->limit_rows - $this->limit_rows;
$arr_page[$i] = $start.', '.$this->limit_rows;
}
if ($this->limit_slice > 0){
if ($this_page > ceil($this->limit_slice / 2
) and
$this_page <= ($total_page)){ $start_slise = ($this_page - ceil($this->limit_slice / 2
)); }else{
$start_slise = 0;
}
$arr_page = array_slice($arr_page, $start_slise, $this->limit_slice, true); }
return $arr_page;
}
}
}