Частые ошибки в шаблонизаторе
  • 08 Aug 2023
  • 1 минута
  • Темная тема
    Светлая тема
  • формат pdf

Частые ошибки в шаблонизаторе

  • Темная тема
    Светлая тема
  • формат pdf

Article Summary

При ошибках использования шаблонизатора срабатывает валидация. Как результат вы получаете название ошибки, которая не дает сохранить письмо.
Научимся разбирать эти ошибки и исправлять их.

В рассылке содержатся неизвестные параметры

Возможные причины и способы исправления.

Работаете с коллекцией?

Проверьте, что правильно задали цикл.

Пример.

Есть параметр Session.GetCategoryActions("ProsmotrKategoriiTovara").Take(1).Categories.Name
Внутри него — коллекция Session.GetCategoryActions("ProsmotrKategoriiTovara").Take(1).Categoriesи значение (название) элемента из этой коллекции: ...Name.

Правильный вывод названий:

@{for category in Session.GetCategoryActions("ProsmotrKategoriiTovara").Take(1).Categories}
${category.Name}
@{end for}

Тоже коллекция, но вложенная

То есть цикл в цикле.

Пример:
Order.Items.Take(1).Product.Categories.Name — коллекция Order.Items.Take(1), каждый её элемент имеет ещё одну коллекцию .Product.Categories, и уже у этого элемента есть значение: ...Name.

Как понять, что мы столкнулись с такой ситуацией и нужен цикл в цикле?

При формировании параметра мы дважды натыкаемся на коллекцию.

Важно!

Take сам по себе не считается отдельной коллекцией, так это просто функция, которая относится к предыдущему параметру-коллекции и отбирает из неё N-нное количество элементов

Первая коллекция:

Снимок экрана 2021-07-02 в 19.43.04.png

Вторая коллекция:

Снимок экрана 2021-07-02 в 19.43.21.png

Правильный вывод названий:

@{for item in Order.Items.Take(1)}
    @{for category in item.Product.Categories}
        ${category.Name}
    @{end for}
@{end for}

Параметр правильный, но используется неправильным типом.

Например, параметр — строка, а вы пытаетесь сложить его с числом.
${Recipient.CustomField.String + 1} выдаст ошибку, если дополнительное поле не числового типа.

Некорректный шаблон: Строка N, символ M: Недопустимый символ (жалоба на последний символ в шаблоне)

Проверьте, что у вас закрыты все циклы: сравните количество @{for и @{end for}, @{if и @{end if} — они должны совпадать.

Строка M, символ N: Invalid symbol

Проверьте верстку в редакторе кода — возможно в него попали символы из неподходящей кодировки. Такое может быть при копировании кода из различных источников.

Например, можно использовать VS Code:

Снимок экрана 2022-09-09 в 19.00.18.png

В метод Take в качестве аргумента под номером 1 передано не константное значение

Функции принимают только константные значения — то есть не переменные, а конкретные значения.
Попытка использовать вместо них переменные закончится ошибкой.

Например, Session.GetCategoryActions("ProsmotrKategoriiTovara").Take(N).Categories — нерабочий вариант.

Недопустимый тип аргумента «quantity» функции «appendForms»: Ожидался Decimal, а передан String, Строка 1, символ 14: Недопустимый тип результата функции FormatDecimal. Ожидался Decimal, а она возвращает String

Пытаемся использовать функцию, предназначенную для другого типа данных.

Например,
${AppendForms(FormatDecimal(CustomParameters.balance, 'N0′), "балл", "балла", "баллов")} — функция FormatDecimal преобразует параметр в строку, а функция AppendForms ожидает получить число. Получается конфликт.

Шаблон содержит элементы базового языка параметров, но для рассылки включен расширенный язык

Символ вывода параметра указан внутри фигурных скобок, а не снаружи.
Например, вместо ${Recipient.OnlyStandardFirstName} указали {$Recipient.OnlyStandardFirstName}

Как ускорить верстку email-рассылок с помощью универсального шаблона