<?php
/**
* Генерирует адаптивную пагинацию с кнопками "Назад", "Вперёд" и умными "..."
*
* @param int $currentPage Текущая страница
* @param int $totalPages Общее количество страниц
* @param int $delta Количество соседних страниц, отображаемых рядом
* @return string HTML-код пагинации
*/
function renderPagination($currentPage, $totalPages, $delta = 2) {
if ($totalPages <= 1) return ''; // Если страниц всего одна, скрываем пагинацию
$output = '<nav class="pagination">';
// ? Кнопка "Назад"
if ($currentPage > 1) {
$output .= '<a href="?page=' . ($currentPage - 1) . '" rel="prev">« Назад</a>';
}
// ? Первая страница и троеточие, если необходимо
if ($currentPage > $delta + 2) {
$output .= '<a href="?page=1">1</a>';
$output .= '<span>...</span>';
}
// ? Основные страницы вокруг текущей
for ($i = max(1, $currentPage - $delta); $i <= min($totalPages, $currentPage + $delta); $i++) { if ($i == $currentPage) {
$output .= '<span class="active">' . $i . '</span>';
} else {
$output .= '<a href="?page=' . $i . '">' . $i . '</a>';
}
}
// ? Последняя страница и троеточие, если необходимо
if ($currentPage < $totalPages - $delta - 1) {
$output .= '<span>...</span>';
$output .= '<a href="?page=' . $totalPages . '">' . $totalPages . '</a>';
}
// ? Кнопка "Вперёд"
if ($currentPage < $totalPages) {
$output .= '<a href="?page=' . ($currentPage + 1) . '" rel="next">Вперёд »</a>';
}
$output .= '</nav>';
return $output;
}
// Пример использования:
$currentPage = isset($_GET['page']) ?
(int
)$_GET['page'] : 1; // Определяем текущую страницу $totalPages = 20; // Количество страниц (например, из базы данных)
// Выводим пагинацию
echo renderPagination($currentPage, $totalPages);
?>