Категории

Черновик: как добавить пагинацию в tag.php

26.12.2025 | Статья из категории: Создание сайтов

Когда вернусь к доработке тегов — нужно реализовать пагинацию по шагам ниже.

1. Определить текущую страницу

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, $page);
$limit = 10; // записей на страницу
$offset = ($page - 1) * $limit;

2. Изменить SQL-запросы — добавить LIMIT и OFFSET

Для статей:

$articles = $pdo->prepare("
    SELECT a.id, a.title, a.preview_text, a.image, a.created_at, 'article' AS post_type
    FROM articles a
    JOIN article_tags at ON a.id = at.article_id
    WHERE at.tag_id = ?
    ORDER BY a.created_at DESC
    LIMIT ? OFFSET ?
");
$articles->execute([$tag['id'], $limit, $offset]);

Аналогично для code_posts.

3. Посчитать общее число записей

$countStmt = $pdo->prepare("
    SELECT COUNT(*) FROM (
        SELECT 1 FROM articles a
        JOIN article_tags at ON a.id = at.article_id
        WHERE at.tag_id = ?
        UNION ALL
        SELECT 1 FROM code_posts cp
        JOIN code_post_tags cpt ON cp.id = cpt.code_post_id
        WHERE cpt.tag_id = ?
    ) total
");
$countStmt->execute([$tag['id'], $tag['id']]);
$totalPosts = (int)$countStmt->fetchColumn();
$totalPages = ceil($totalPosts / $limit);

4. Вывести пагинацию внизу

<?php if ($totalPages > 1): ?>
<div class="pagination">
    <?php for ($i = 1; $i <= $totalPages; $i++): ?>
        <a href="/tag.php/?page=<?= $i ?>" 
           class="<?= $i === $page ? 'active' : '' ?>"><?= $i ?></a>
    <?php endfor; ?>
</div>
<?php endif; ?>

5. SEO и ЧПУ

6. Когда верну картинки

Не забыть добавить в CSS:

.post-thumb {
    max-width: 100%;
    height: auto;
    max-height: 300px;
    object-fit: cover;
    margin-bottom: 12px;
}

Статус: отложено. Картинки скрыты. Вернуться позже.

Комментарии

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

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

← Назад к списку статей

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


кто я | моя книга | о блоге

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