Clone
1
Blocks
s.zotov edited this page 2026-04-13 12:25:01 +05:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Блоки и парсинг

Что такое блок

Блок — фрагмент Pug-кода, который можно добавить в письмо. Хранится в block.pug проекта:

//Текст
tr
    td.padding-wrapper
        span.text Здесь текст

//Кнопка
tr
    td(align="center")
        +buttonRounded("Текст кнопки", "https://...", 525, 42, "#c9e905", 18, "#000000", 4, "#c9e905")

Комментарий //Название — разделитель и имя блока.

Schema (поля редактирования)

Для каждого блока конструктор автоматически генерирует schema — список редактируемых полей. Типы:

Тип Описание Пример
text Текстовое поле span.text Текст здесь
href URL ссылки a(href="https://...")
src URL картинки img(src="https://...")
mixin-text Текстовый аргумент миксина +button("Текст", ...)
mixin-href URL аргумент миксина +button("...", "https://...")
mixin-ids ID товаров (через запятую) +products3inRow("1,2,3")
select Выбор из вариантов (цветовые темы) - var _t = 'синий'
raw Полный Pug-код блока

mixinRules (settings.json)

Правила маппинга аргументов миксинов на типы полей:

{
  "mixinRules": [
    { "mixin": "products3inRow", "argIndex": 0, "type": "mixin-ids", "label": "ID товаров" },
    { "mixin": "buttonRounded", "argIndex": 0, "type": "mixin-text", "label": "Текст" },
    { "mixin": "buttonRounded", "argIndex": 1, "type": "mixin-href", "label": "Ссылка" }
  ]
}

extraFields (цветовые темы)

Дополнительные поля поверх авто-схемы. Используются для цветовых тем Реаспект:

{
  "blocks": {
    "Текст 100% Ширины": {
      "extraFields": [{
        "type": "select",
        "lineIndex": 0,
        "options": [
          {"label": "Синий", "value": "синий", "color": "#130F33"},
          {"label": "Белый", "value": "белый", "color": "#ffffff"},
          {"label": "Зелёный", "value": "зелёный", "color": "#AAC8C8"}
        ]
      }]
    }
  }
}

В Pug это работает через переменную на первой строке:

- var _t = 'синий'
- var _bg = _t === 'белый' ? 'background__white' : _t === 'зелёный' ? 'background__green' : 'background__blue'

Парсинг (parsing.js)

buildBaseSchema(content, blockName, mixinRules) — главная функция. Алгоритм:

  1. Разбивает content на строки
  2. Для каждой строки определяет тип: текст, ссылка, картинка, вызов миксина
  3. Если есть mixinRules для миксина — использует их
  4. Иначе — автоопределение по содержимому аргументов
  5. Применяет extraFields из settings

Известное ограничение: Regex-парсинг. Работает для шаблонных блоков. Если изменить структуру миксина — нужно обновить mixinRules.