Категории

Как сделать пагинацию для блога на PHP: просто, безопасно, без лишних движков

23.08.2025 15:37 | коды из категории: Создание сайтов

Если статей в блоге становится много, надо разбить на страницы для юзабилити

про Как сделать пагинацию для блога на PHP: просто, безопасно, без лишних движков

Как сделать пагинацию для блога на PHP: просто, безопасно, без лишних движков

Психология цифрового рабства | 2025-08-20

Если у тебя в блоге больше 10 статей — и ты всё ещё грузишь их все разом, поздравляю: ты не блогер, ты мученик.

Твой сайт тормозит, база стонет, а пользователь ждёт загрузки дольше, чем идёт дождь в Подмосковье.

Решение? Пагинация.
Разбивка статей по страницам.
Сегодня — как сделать это на чистом PHP с PDO. Без Laravel, без фреймворков. Только ты, база и правда.

Почему нельзя просто LIMIT 10?

Многие делают так:

$stmt = $pdo->query("SELECT * FROM articles ORDER BY created_at DESC LIMIT 10");
    

Это работает. Но это не пагинация. Это просто обрезка.
Чтобы перейти на страницу 2, 3, 4 — нужно уметь управлять смещением.

Шаг 1: Определим параметры

Нам нужно:

$articles_per_page = 10;
$page = $_GET['page'] ?? 1;
$page = (int)$page;
$page = max(1, $page); // минимум — первая страница

$offset = ($page - 1) * $articles_per_page;
    

Шаг 2: Посчитаем общее количество статей

$total_stmt = $pdo->query("SELECT COUNT(*) FROM articles");
$total_articles = $total_stmt->fetchColumn();
$total_pages = ceil($total_articles / $articles_per_page);
    

Теперь мы знаем, сколько будет страниц.

Шаг 3: Выбираем статьи с пагинацией

Важно: используем 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() вернёт только нужные статьи.

Шаг 4: Выводим пагинацию

После цикла с выводом статей добавь навигацию:

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>";

Что даёт такая пагинация?

Бонус: SEO и UX

Вывод

Пагинация — это не про "красиво", это про выживание блога.
Если ты не разбиваешь контент — ты не блогер, ты хранитель цифровой свалки.

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

Теги: #PHP #Безопасность #MySQL #пагинация #pdo #веб-разработка #оптимизация #производительность сайта #чистый php #без фреймворков #блог #статьи #навигация по страницам #LIMIT OFFSET #веб-программирование #серверная разработка #база данных

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA