Когда вернусь к доработке тегов — нужно реализовать пагинацию по шагам ниже.
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, $page);
$limit = 10; // записей на страницу
$offset = ($page - 1) * $limit;
Для статей:
$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.
$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);
<?php if ($totalPages > 1): ?>
<div class="pagination">
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<a href="/tag.php/= urlencode($tag['slug']) ?>?page=<?= $i ?>"
class="<?= $i === $page ? 'active' : '' ?>"><?= $i ?></a>
<?php endfor; ?>
</div>
<?php endif; ?>
?page=N — проще и безопаснее.<link rel="canonical"> на первую страницу.<meta name="robots" content="noindex, follow">, если мало контента.Не забыть добавить в CSS:
.post-thumb {
max-width: 100%;
height: auto;
max-height: 300px;
object-fit: cover;
margin-bottom: 12px;
}
Статус: отложено. Картинки скрыты. Вернуться позже.
Комментарии
Пока нет комментариев. Будьте первым!