design fixes, tables seperate by language, loading and 404 pages, downloads from cms

This commit is contained in:
Трапезников Кирилл Иванович
2026-04-19 16:05:05 +10:00
parent cb4ae3bc25
commit 7acc40ec46
27 changed files with 1260 additions and 727 deletions
+5 -7
View File
@@ -26,17 +26,15 @@ export default async function BlogPostPage({ params }: Props) {
let post: PBPost;
try {
// Ищем в соответствующей коллекции по слагу
post = await pb
.collection("posts")
.getFirstListItem<PBPost>(
`slug = "${slug}" && lang = "${lang}" && published = true`,
{ cache: "no-store" },
);
.collection(`posts_${lang}`)
.getFirstListItem<PBPost>(`slug = "${slug}" && published = true`, {
cache: "no-store",
});
} catch (error) {
// В продакшене лучше не логировать каждый 404, чтобы не забивать консоль
notFound();
}
return (
<main className="min-h-screen pt-32 pb-20 bg-background">
<div className="container mx-auto max-w-3xl px-4">
+4 -4
View File
@@ -24,11 +24,11 @@ export default async function BlogIndexPage({ params }: Props) {
let records: PBPost[] = [];
try {
// Возвращаем фильтрацию: только нужный язык и только опубликованные
records = await pb.collection("posts").getFullList<PBPost>({
filter: `lang = "${lang}" && published = true`,
// Динамически выбираем таблицу: posts_ru или posts_en
records = await pb.collection(`posts_${lang}`).getFullList<PBPost>({
filter: "published = true",
sort: "-created",
cache: "no-store", // Чтобы новые посты из админки появлялись сразу
cache: "no-store",
});
} catch (err) {
console.error("Failed to fetch blog posts:", err);