Создание простого скрипта пагинации на PHP: шаг за шагом

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для настройки пагинации мы используем конструкцию LIMIT :perPage OFFSET :offset в SQL. Это позволяет ограничить количество данных на одной странице:

php
Скопировать код
// Определяем номер текущей страницы из URL, а если его нет, то считаем, что это первая страница.
$page = max(1, (int) ($_GET['page']));
$perPage = 10;
$offset = ($page – 1) * $perPage;

// $pdo = new PDO('mysql:host=your_host;dbname=your_db', 'username', 'password');

$stmt = $pdo->prepare("SELECT * FROM table_name LIMIT :perPage OFFSET :offset");
$stmt->execute([':perPage' => $perPage, ':offset' => $offset]);
$results = $stmt->fetchAll();

// Далее идут ссылки для навигации по страницам...

Не забудьте заменить имя таблицы table_name и параметры подключения в объекте PDO на свои. Данный код поможет вам быстро настроить пагинацию с заданным количеством записей на одной странице perPage.

Кинга Идем в IT: пошаговый план для смены профессии

Создание карты пагинации

Расчёт и проверка: Подготовка

Прежде всего, определите общее количество страниц. Для этого подсчитайте все записи в таблице, а затем вычислите количество страниц с помощью функции ceil():

php
Скопировать код
$stmt = $pdo->query("SELECT COUNT(*) FROM table_name");
$rowsCount = $stmt->fetchColumn();

$totalPages = ceil($rowsCount / $perPage);

Чтобы избежать ошибок связанных с номером текущей страницы, используйте функцию min(). Это будет защитой от запросов, количество которых превышает общее количество страниц:

php
Скопировать код
$page = min($totalPages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
        'default'   => 1,
        'min_range' => 1,
    ),
)));

Создание ссылок пагинации

Зная текущую страницу и общее количество страниц, вы можете сформировать навигационные ссылки. Желательно ограничить их количество, чтобы не перегружать интерфейс пользователя:

php
Скопировать код
$start = max(1, $page – 5);
$end = min($totalPages, $page + 5);

for ($i = $start; $i <= $end; $i++) {
    // Всё лучше с интерактивною ссылкой!
    echo "<a href='script.php?page=" . $i . "'" . ($page == $i ? " class='active'" : "") . ">" . $i . "</a> ";
}

Добавьте контекстные ссылки «Предыдущая» и «Следующая», чтобы пользователь не воспринимал ссылку на текущую страницу как активную:

php
Скопировать код
if ($page > 1) {
    echo "<a href='script.php?page=" . ($page – 1) . "'>Предыдущая</a> ";
}

// Текущая страница становится неактивной меткой.

if ($page < $totalPages) {
    echo "<a href='script.php?page=" . ($page + 1) . "'>Следующая</a> ";
}

Увеличение эффективности запросов и повышение производительности: Действия по ускорению

Когда вы формируете запросы, помните: безопасность является вашим приоритетом. Используйте подготовленные выражения PDO и параметр PDO::PARAM_INT для гарантированной работы с SQL.

В случае возникновения исключений и ошибок используйте их как возможность дать пользователю полезную информацию.

Не забывайте указывать соответствующие параметры LIMIT в SQL-запросах, чтобы не перегружать систему, как это может произойти при наличии бесконечного количества пиццы... Хотя, в вопросах пиццы это субъективно 🍕

Вывод данных

Отобразите данные из вашего постраничного запроса, используя циклы while или foreach:

php
Скопировать код
foreach ($results as $row) {
    // Данные текут, как река!
    echo "<p>" . htmlspecialchars($row['column_name']) . "</p>";
}

Подумайте о размещении панели управления пагинацией сверху и снизу страницы, чтобы упростить навигацию пользователям.

Обратитесь к онлайн-материалам и документации, они помогут усовершенствовать базовую пагинацию и превратить её в мощный инструмент.

Визуализация

Пагинацию на PHP можно представить как книжную полку, где каждый том имеет свой порядковый номер:

Markdown
Скопировать код
📚📚📚📚 | 📚📚📚📚 | 📚📚📚📚
  1  2   3   4   |   5  6   7   8   |   9  10  11  12
      📖         |         📖        |         📖
   < Предыдущая  |  Страница 2 из 4  |  Следующая >

Текущая страница — это Страница 2.
Книги на полке — это строки в базе данных.

Markdown
Скопировать код
**Навигация**:
- [Предыдущая] Возврат на предыдущую страницу.
- [Следующая] Переход на следующую страницу.

Каждое обращение к полке открывает сегмент полной коллекции данных, предоставляя возможность просмотра её постранично.

Усиление пагинации

Балансировка нагрузки: дело баланса

Для улучшения производительности ограничьте количество строк до разумного предела. Создайте индексы в столбцах, по которым часто производится сортировка или фильтрация данных.

Улучшение пагинации: UX на уровне стероидов

Для улучшения пользовательского взаимодействия добавьте ссылки на «Первую» и «Последнюю» страницу. Это особенно удобно, когда пользователь находится на большом расстоянии от начала или конца списка страниц.

php
Скопировать код
// Элементы "Первая" и "Последняя" страницы выполняют важную роль в пагинации.
echo "<a href='script.php?page=1'>Первая</a> ";
echo "...";
echo "<a href='script.php?page=" . $totalPages . "'>Последняя</a> ";

Не стесняйтесь использовать CSS, чтобы элементы пагинации вписывались в общий стиль сайта.

Учтите, что некоторым может быть неудобно использовать мышь, предоставьте возможность навигации по страницам с клавиатуры и используйте метки ARIA.

Полезные материалы

  1. PHP: PDO::query – Руководство – незаменимый источник информации для выполнения SQL-запросов с PHP PDO.
  2. Свежие вопросы по 'php+pagination' – Stack Overflow – место для обмена знаниями, которое поможет вам понять и решить вопросы, связанные с пагинацией на PHP.
  3. Как создать простую пагинацию с PHP – полезное руководство по реализации пагинации на PHP.