[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничная навигация или пагинация PHP
ЛьiжHиk
Насколько знаю в интернете можно найти неимоверное количество реализаций пагинации на PHP и MySQL, но по причине неумения или нежелания пользоваться поисковыми системами, данные вопросы снова появляются на форуме, поэтому набросал рабочий пример.

function pagination($page, $num_page) {
//Проверяем нужна ли ссылка "На первую"
if($page > 3){
$initial = ' <a href="/index.php?page=1">Первая</a> ';
} else {
$initial = '';
}
//Проверяем нужна ли ссылка "На последнюю"
if($page < ($num_page - 2)) {
$final = ' <a href="/index.php?page='.$num_page.'">Последняя</a> ';
} else {
$final = '';
}
//Проверяем нужна ли ссылка "На предыдущую"
if($page > 1) {
$previous = ' <a href="/index.php?page='.($page - 1).'">'.($page - 1).'</a> ';
} else {
$previous = '';
}
//Проверяем нужна ли ссылка "На следущую"
if($page < $num_page) {
$next = ' <a href="/index.php?page='.($page + 1).'">'.($page + 1).'</a> ';
} else {
$next = '';
}
//Проверяем нужна ли ссылка "На 2 страницы назад"
if($page - 2 > 0) {
$previous_two = ' <a href="/index.php?page='.($page - 2).'">'.($page - 2).'</a> ';
} else {
$previous_two = '';
}
//Проверяем нужна ли ссылка "На 2 страницы вперёд"
if($page + 2 <= $num_page) {
$next_two = ' <a href="/index.php?page='.($page + 2).'"> '.($page + 2).' </a> ';
} else {
$next_two = '';
}

$result = $initial.$previous_two.$previous.$page.$next.$next_two.$final;
return $result;
}

if(!isset($_GET['page'])){
$page = 1;
} else{
$page = (int) $_GET['page'];
if($page < 1) $page = 1;
}

$query = mysqli_num_rows(mysqli_query($connection, "SELECT `id` FROM `table`")); // Подсчет общего числа записей

if($query) {
$num = (int) 19; // Количество элементов на странице
$num_page = ceil($query / $num); // Подсчет числа страниц
if ($page > $num_page) $page = $num_page; // Последняя страница не должна быть больше имеющейся
$startDB = ($page - 1)*$num; // Стартовая позиция выборки из базы данных

$query_page = mysqli_query($connection, "SELECT * FROM `table` LIMIT $startDB, $num");

// Достаём и отображаем данные

if(2 <= $num_page) {
echo pagination($page, $num_page); // Пагинация
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.