68 lines
2.4 KiB
Markdown
68 lines
2.4 KiB
Markdown
|
|
# 04. Layout Engine
|
|||
|
|
|
|||
|
|
## Назначение
|
|||
|
|
Layout Engine отвечает за композицию страницы из секций по данным конфигурации и управляет только структурой и позиционированием, без доменной бизнес-логики.
|
|||
|
|
|
|||
|
|
## Поведение системы
|
|||
|
|
- Engine читает page.sections.
|
|||
|
|
- Секции сортируются по order.
|
|||
|
|
- Для каждой секции применяется layout-стратегия.
|
|||
|
|
- Виджеты размещаются внутри секции согласно layout-параметрам.
|
|||
|
|
|
|||
|
|
## Обязательные свойства JSON
|
|||
|
|
- section.id
|
|||
|
|
- section.type
|
|||
|
|
- section.order
|
|||
|
|
- section.widgets
|
|||
|
|
|
|||
|
|
## Опциональные свойства JSON
|
|||
|
|
- section.layout.strategy
|
|||
|
|
- section.layout.columns
|
|||
|
|
- section.layout.gap
|
|||
|
|
- section.layout.align
|
|||
|
|
- section.visibility.desktop/tablet/mobile
|
|||
|
|
- section.featureFlag
|
|||
|
|
|
|||
|
|
## Строгие правила
|
|||
|
|
- Layout определяется только конфигурацией.
|
|||
|
|
- Виджет не может переопределять секционный grid/columns на уровне страницы.
|
|||
|
|
- Если section.visible=false, секция не рендерится.
|
|||
|
|
- Секция должна рендериться в стандартном каркасе: section + page container.
|
|||
|
|
|
|||
|
|
## Пример JSON секции
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": "section-featured-products",
|
|||
|
|
"type": "product-collection",
|
|||
|
|
"order": 2,
|
|||
|
|
"layout": {
|
|||
|
|
"strategy": "grid",
|
|||
|
|
"columns": 4,
|
|||
|
|
"gap": "16px",
|
|||
|
|
"align": "stretch"
|
|||
|
|
},
|
|||
|
|
"visibility": {
|
|||
|
|
"desktop": true,
|
|||
|
|
"tablet": true,
|
|||
|
|
"mobile": true
|
|||
|
|
},
|
|||
|
|
"widgets": [
|
|||
|
|
{
|
|||
|
|
"id": "widget-featured",
|
|||
|
|
"type": "product-carousel",
|
|||
|
|
"version": "1.0.0"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Ответственность Frontend
|
|||
|
|
- Корректно применять сортировку и layout-параметры.
|
|||
|
|
- Гарантировать единые отступы и контейнеры секций.
|
|||
|
|
- Безопасно деградировать при частично некорректном layout.
|
|||
|
|
|
|||
|
|
## Ответственность Backend
|
|||
|
|
- Отдавать корректные layout-атрибуты в bootstrap.
|
|||
|
|
- Не смешивать контентные данные с layout-инструкциями.
|
|||
|
|
- Поддерживать непротиворечивость секций внутри страницы.
|