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-инструкциями.
|
||
- Поддерживать непротиворечивость секций внутри страницы.
|