Создание простого скрипта пагинации на PHP: шаг за шагом
Быстрый ответ
Для настройки пагинации мы используем конструкцию LIMIT :perPage OFFSET :offset
в SQL. Это позволяет ограничить количество данных на одной странице:
// Определяем номер текущей страницы из 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
.
Создание карты пагинации
Расчёт и проверка: Подготовка
Прежде всего, определите общее количество страниц. Для этого подсчитайте все записи в таблице, а затем вычислите количество страниц с помощью функции ceil()
:
$stmt = $pdo->query("SELECT COUNT(*) FROM table_name");
$rowsCount = $stmt->fetchColumn();
$totalPages = ceil($rowsCount / $perPage);
Чтобы избежать ошибок связанных с номером текущей страницы, используйте функцию min()
. Это будет защитой от запросов, количество которых превышает общее количество страниц:
$page = min($totalPages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 1,
'min_range' => 1,
),
)));
Создание ссылок пагинации
Зная текущую страницу и общее количество страниц, вы можете сформировать навигационные ссылки. Желательно ограничить их количество, чтобы не перегружать интерфейс пользователя:
$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> ";
}
Добавьте контекстные ссылки «Предыдущая» и «Следующая», чтобы пользователь не воспринимал ссылку на текущую страницу как активную:
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
:
foreach ($results as $row) {
// Данные текут, как река!
echo "<p>" . htmlspecialchars($row['column_name']) . "</p>";
}
Подумайте о размещении панели управления пагинацией сверху и снизу страницы, чтобы упростить навигацию пользователям.
Обратитесь к онлайн-материалам и документации, они помогут усовершенствовать базовую пагинацию и превратить её в мощный инструмент.
Визуализация
Пагинацию на PHP можно представить как книжную полку, где каждый том имеет свой порядковый номер:
📚📚📚📚 | 📚📚📚📚 | 📚📚📚📚
1 2 3 4 | 5 6 7 8 | 9 10 11 12
📖 | 📖 | 📖
< Предыдущая | Страница 2 из 4 | Следующая >
Текущая страница — это Страница 2
.
Книги на полке — это строки в базе данных.
**Навигация**:
- [Предыдущая] Возврат на предыдущую страницу.
- [Следующая] Переход на следующую страницу.
Каждое обращение к полке открывает сегмент полной коллекции данных, предоставляя возможность просмотра её постранично.
Усиление пагинации
Балансировка нагрузки: дело баланса
Для улучшения производительности ограничьте количество строк до разумного предела. Создайте индексы в столбцах, по которым часто производится сортировка или фильтрация данных.
Улучшение пагинации: UX на уровне стероидов
Для улучшения пользовательского взаимодействия добавьте ссылки на «Первую» и «Последнюю» страницу. Это особенно удобно, когда пользователь находится на большом расстоянии от начала или конца списка страниц.
// Элементы "Первая" и "Последняя" страницы выполняют важную роль в пагинации.
echo "<a href='script.php?page=1'>Первая</a> ";
echo "...";
echo "<a href='script.php?page=" . $totalPages . "'>Последняя</a> ";
Не стесняйтесь использовать CSS, чтобы элементы пагинации вписывались в общий стиль сайта.
Учтите, что некоторым может быть неудобно использовать мышь, предоставьте возможность навигации по страницам с клавиатуры и используйте метки ARIA.
Полезные материалы
- PHP: PDO::query – Руководство – незаменимый источник информации для выполнения SQL-запросов с PHP PDO.
- Свежие вопросы по 'php+pagination' – Stack Overflow – место для обмена знаниями, которое поможет вам понять и решить вопросы, связанные с пагинацией на PHP.
- Как создать простую пагинацию с PHP – полезное руководство по реализации пагинации на PHP.