--- import { MONTHS } from "@lib/constants"; const POCKETBASE_URL = import.meta.env.POCKETBASE_URL || "http://localhost:8090"; export interface Props { currentPostId?: string; currentPostSlug?: string; } const { currentPostId, currentPostSlug } = Astro.props; interface PostRecord { id: string; title: string; slug: string; excerpt: string; image?: string; tags?: string; created: string; } interface PocketBaseResponse { items: PostRecord[]; } // Получаем похожие посты (исключая текущий) let relatedPosts: PostRecord[] = []; try { const filter = currentPostId ? `id!="${currentPostId}"` : ""; const response = await fetch( `${POCKETBASE_URL}/api/collections/posts/records?filter=${encodeURIComponent(filter)}&perPage=3` ); const data: PocketBaseResponse = await response.json(); if (data.items) { relatedPosts = data.items; } } catch (error) { console.error("Error fetching related posts:", error); } // Форматируем дату function formatDate(dateString: string) { const date = new Date(dateString); return `${date.getDate()} ${MONTHS[date.getMonth()]} ${date.getFullYear()}`; } // Парсим tags function parseTags(tagsString?: string): string { if (!tagsString) return "НОВОСТИ"; try { const tags = typeof tagsString === "string" ? JSON.parse(tagsString) : tagsString; return Array.isArray(tags) && tags.length > 0 ? tags[0].toUpperCase() : "НОВОСТИ"; } catch { return "НОВОСТИ"; } } ---
{/* Заголовок */}

Похожие публикации

Все статьи
{/* Сетка карточек */}
{relatedPosts && relatedPosts.length > 0 ? ( relatedPosts.map((post) => { const imageUrl = post.image ? `${POCKETBASE_URL}/api/files/posts/${post.id}/${post.image}` : "https://images.unsplash.com/photo-1589829085413-56de8ae18c73?q=80&w=800&auto=format&fit=crop"; return ( ); }) ) : (

Нет связанных публикаций

)}