Москва
Загрузка...

Каталог

8 (800) 444-47-53

Тестовая статья

Описание статьи

# Задача: Добавление функциональности блога


 

## Цель


 

Создать структуру маршрутов и страниц для блога с разделами и статьями. Блог должен поддерживать:


 

- Главную страницу блога со списком разделов и всех статей в виде карточек-ссылок
- Страницы разделов блога со списком статей (с пагинацией)
- Страницы отдельных статей с блоком "Смотрите также"
- Правильное отображение вложенности в хлебных крошках
- Отображение даты публикации (если доступна)


 

## Приоритет: Средний


 

---


 

## Текущее состояние


 

### Существующие маршруты:


 

- `/product/[productId]` - страница товара по slug
- `/catalog` - главная страница каталога
- `/catalog/[razdelName]` - категории/подкатегории каталога
- `/services/[serviceName]` - услуги по slug


 

### Существующие API endpoints:


 

- `/api/blog-sections` - получение разделов блога
- `/api/blogs` - получение списка статей (с фильтрацией по `sectionSlug`)
- `/api/blogs/[slug]` - получение статьи по slug


 

---


 

## Изменение существующих маршрутов


 

### Проверка и обновление маршрута каталога


 

**Текущее состояние:**


 

- `/catalog` - главная страница каталога
- `/catalog/[razdelName]` - категории/подкатегории каталога (один параметр)


 

**Проблема:**
Текущая структура `/catalog/[razdelName]` поддерживает только один уровень вложенности. Если в каталоге есть категории и подкатегории, и нужно показывать полный путь в хлебных крошках (например: `/catalog/category/subcategory`), требуется изменить структуру маршрута.


 

**Решение:**


 

**Вариант 1: Optional Catch-all (рекомендуется)**
Использовать `[[...slug]]` для поддержки как главной страницы, так и вложенных категорий:


 

```
frontend/src/app/catalog/
├── page.tsx # Главная страница каталога (уже существует)
├── [[...slug]]/ # Вложенные категории/подкатегории
│ └── page.tsx # Переместить логику из [razdelName]/page.tsx
```


 

**Изменения:**


 

- Переименовать папку `[razdelName]``[[...slug]]`
- Обновить обработку параметров: `params.slug` будет массивом `string[] | undefined`
- Обновить логику получения категории по пути из массива slug
- Обновить хлебные крошки для отображения полного пути


 

**Пример обработки:**


 

```typescript
type Params = Promise<{ slug?: string[] }>;


 

export default async function CatalogPage({ params }: { params: Params }) {
const { slug } = await params;


 

// Если slug пустой или undefined - показать главную страницу каталога
if (!slug || slug.length === 0) {
// Логика главной страницы
}


 

// Если есть slug - обработать вложенность
// slug[0] - первая категория
// slug[1] - подкатегория (если есть)
// и т.д.
}
```


 

**Вариант 2: Catch-all (если главная страница не нужна в этой структуре)**
Использовать `[...slug]` если главная страница `/catalog` обрабатывается отдельно:


 

```
frontend/src/app/catalog/
├── page.tsx # Главная страница каталога
└── [...slug]/ # Вложенные категории/подкатегории

0

0