К содержанию

Навигация

Что такое макет

Макет — способ описать страницу структурой, а не HTML-разметкой. Он даёт одну проверяемую запись страницы, которую одинаково понимают сервер, браузер, редактор и ИИ.

Определение

Макет — это описание страницы в JSON: из каких частей она состоит, как они вложены друг в друга и в каком порядке идут. Готовый макет — документ формата simai.composition.document с "schema_version": 1 рядом; прежняя метка simai.composition.document.v1 тоже принимается — так помечен, например, документ, собранный из рецепта в прежней форме (см. Имена и версии). В нём хранятся типы элементов, их настройки и содержимое. Framework проверяет документ и превращает его в безопасный HTML.

Главный принцип: одна запись — одна и та же страница везде. Сервер, браузер, редактор, генератор документации и ИИ работают с одним и тем же документом и по одним правилам. Одинаковый документ даёт одинаковую нормализованную форму и одинаковый отпечаток (SHA-256) в Node.js, в браузере и в PHP-проверке. Поэтому результат можно кешировать, сравнивать и воспроизводить.

Какие задачи решает

  • Страница отделена от разметки. Исходные данные страницы — структура. HTML получают в конце, из структуры.
  • Страницу можно собрать в системе управления сайтом. Редактор страниц переставляет секции и правит текст, а не HTML-строки.
  • Одна страница — разные варианты. Настройка сайта выбирает, например, краткую или расширенную шапку, а сборщик раскрывает только выбранную ветвь.
  • Проверка до показа. Неизвестный тип, неверный слот, опасная ссылка или превышение лимита находятся до того, как страница попадёт к посетителю.
  • Машинное описание. Макет пригоден для генерации и проверки ИИ: каждое поле объявлено в схеме, придумать «удобное» поле нельзя.

Пример: каталог

Каталог можно представить как страницу, внутри которой секция с заголовком, вводным абзацем и колонками для фильтров и товаров. JSON отвечает на вопрос «что показать», Framework — «как проверить и отрисовать», а проект загружает товары и решает, что доступно посетителю.

JSON
{
  "schema": "simai.composition.document",
  "schema_version": 1,
  "id": "catalog-page",
  "profile": "ui-layout",
  "locale": "ru",
  "root": {
    "id": "page",
    "type": "layout.page",
    "slots": {
      "default": [
        {
          "id": "catalog",
          "type": "layout.section",
          "presentation": {"preset": "surface", "modifiers": ["contained"]},
          "bindings": [{"owner": "project/catalog", "ref": "products", "target": "items", "revision": "42"}],
          "slots": {
            "default": [
              {"id": "title", "type": "content.heading", "data": {"level": 1, "content": [{"type": "text", "value": "Каталог товаров"}]}},
              {"id": "lead", "type": "content.paragraph", "data": {"content": [{"type": "text", "value": "Framework показывает макет, а проект получает товары и проверяет права."}]}},
              {
                "id": "columns",
                "type": "layout.columns",
                "props": {"columns": 2},
                "presentation": {"modifiers": ["responsive"]},
                "slots": {"columns": [
                  {"id": "filters", "type": "content.paragraph", "data": {"content": [{"type": "text", "value": "Фильтры"}]}},
                  {"id": "products", "type": "content.paragraph", "data": {"content": [{"type": "text", "value": "Карточки товаров"}]}}
                ]}
              }
            ]
          }
        }
      ]
    }
  }
}

Чего в макете нет

Макет отвечает на вопрос «что показать». Он не содержит:

  • HTML, JavaScript, PHP, SQL, запросов и выражений;
  • произвольных CSS-классов — только зарегистрированные варианты оформления;
  • секретов: паролей, токенов, cookie, заголовков авторизации;
  • решений о правах доступа и бизнес-правил.

Это правило проверки: ключи вроде html, script, class, query, sql, token, password отклоняются в любом месте документа с кодом executable_or_secret_field_forbidden.

Когда макет не нужен

Обычную неизменяемую страницу можно написать HTML вручную, пользуясь компонентами и утилитами (Утилиты и раскладка и Компоненты). Макет окупается, когда структуру страницы нужно хранить отдельно от разметки, передавать между системами, собирать по настройкам, править в редакторе или создавать с ИИ.

Слово «макет» в Framework

В части Утилиты и раскладка «раскладка» и утилиты раскладки (grid, flex и т. п.) означают CSS-расположение элементов. В этой части «макет» — документ композиции. Это разные уровни: макет описывает дерево страницы, а утилиты раскладки оформляют уже полученный HTML.

Смотрите также

Поиск по документации

Введите минимум 2 символа

    Настройки

    Тема
    Размер шрифта
    Ширина страницы