Если статей в блоге становится много, надо разбить на страницы для юзабилити
Если у тебя в блоге больше 10 статей — и ты всё ещё грузишь их все разом, поздравляю: ты не блогер, ты мученик.
Твой сайт тормозит, база стонет, а пользователь ждёт загрузки дольше, чем идёт дождь в Подмосковье.
Решение? Пагинация.
Разбивка статей по страницам.
Сегодня — как сделать это на чистом PHP с PDO. Без Laravel, без фреймворков. Только ты, база и правда.
Многие делают так:
$stmt = $pdo->query("SELECT * FROM articles ORDER BY created_at DESC LIMIT 10");
Это работает. Но это не пагинация. Это просто обрезка.
Чтобы перейти на страницу 2, 3, 4 — нужно уметь управлять смещением.
Нам нужно:
?page=2).
$articles_per_page = 10;
$page = $_GET['page'] ?? 1;
$page = (int)$page;
$page = max(1, $page); // минимум — первая страница
$offset = ($page - 1) * $articles_per_page;
$total_stmt = $pdo->query("SELECT COUNT(*) FROM articles");
$total_articles = $total_stmt->fetchColumn();
$total_pages = ceil($total_articles / $articles_per_page);
Теперь мы знаем, сколько будет страниц.
Важно: используем prepare(), потому что LIMIT и OFFSET — динамические.
$stmt = $pdo->prepare("
SELECT a.id, a.title, a.preview_text, a.image, a.created_at, c.name as category
FROM articles a
LEFT JOIN categories c ON a.category_id = c.id
ORDER BY a.created_at DESC
LIMIT :limit OFFSET :offset
");
$stmt->bindValue(':limit', $articles_per_page, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
Теперь $stmt->fetchAll() вернёт только нужные статьи.
После цикла с выводом статей добавь навигацию:
echo "<div class='pagination'>";
if ($page > 1) {
echo "<a href='?page=" . ($page - 1) . "'>← Назад</a>";
}
echo "<span>Страница $page из $total_pages</span>";
if ($page < $total_pages) {
echo "<a href='?page=" . ($page + 1) . "'>Вперёд →</a>";
}
echo "</div>";
<title> номер страницы: Главная — Страница 2.rel="prev" и rel="next" в <head>, чтобы поисковики понимали структуру.Пагинация — это не про "красиво", это про выживание блога.
Если ты не разбиваешь контент — ты не блогер, ты хранитель цифровой свалки.
Сделай пагинацию.
Сделай её правильно.
И дай пользователю шанс дочитать до конца — хотя бы потому, что он уже не уснул в процессе загрузки.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!