diff --git a/src/components/ContentGrid.astro b/src/components/ContentGrid.astro index 54a2aa8..850e06a 100644 --- a/src/components/ContentGrid.astro +++ b/src/components/ContentGrid.astro @@ -8,8 +8,48 @@ const { items = [], showCount = false, } = Astro.props; + +// Функция для извлечения класса цвета из строки +function extractColorClass(colorString: string): string { + if (!colorString) return 'bg-blue'; + + // Если строка содержит "фон меню:" - извлекаем часть после двоеточия + if (colorString.includes('фон меню:')) { + const parts = colorString.split(':'); + const color = parts[1]?.trim(); + + // Проверяем существование CSS класса + const validColors = [ + 'black', 'yellow', 'blue', 'green', 'red', 'orange', 'gray', + 'indigo', 'purple', 'pink', 'teal', 'cyan', 'white', + 'gray-dark', 'light', 'dark' + ]; + + if (color && validColors.includes(color)) { + return `bg-${color}`; + } + } + + // Если строка уже содержит "bg-" + if (colorString.startsWith('bg-')) { + return colorString; + } + + // Если это просто название цвета без префикса + const simpleColor = colorString.toLowerCase(); + switch(simpleColor) { + case 'black': case 'yellow': case 'blue': case 'green': + case 'red': case 'orange': case 'gray': case 'indigo': + case 'purple': case 'pink': case 'teal': case 'cyan': + case 'white': case 'dark': case 'light': + return `bg-${simpleColor}`; + case 'gray-dark': return 'bg-gray-dark'; + default: return 'bg-blue'; + } +} --- +

{showCount && items.length > 0 && ( @@ -21,6 +61,10 @@ const { {items.map((item, index) => { const postUrl = item.uri || `/blog/${item.databaseId}`; const postDate = new Date(item.date); + + // Получаем цвет категории и преобразуем в CSS класс + const rawColor = item.categories?.nodes?.[0]?.color || ''; + const categoryBgClass = extractColorClass(rawColor); // Логика для больших плиток на десктопе let isLarge = false; @@ -62,9 +106,9 @@ const {
)} - {/* Рубрика в верхнем правом углу */} + {/* Рубрика в верхнем правом углу с цветом */} {item.categories?.nodes?.[0]?.name && ( - + + \ No newline at end of file + diff --git a/src/lib/api/posts.ts b/src/lib/api/posts.ts index c44e7fa..62ba8df 100644 --- a/src/lib/api/posts.ts +++ b/src/lib/api/posts.ts @@ -59,6 +59,7 @@ export async function getLatestPosts(first = 12, after = null) { nodes { id name + color slug uri databaseId