Динамический контент в письмах. Velocity.
Динамический контент в сообщениях используется для подстановки нужных данных или настроек для отправки пользователю. Например, товары по оформленному заказу, имя клиента или его персональный промокод. С введением в эту тему и более простыми методами можно ознакомиться в этой статье.
В системе eSputnik возможность динамического контента реализована с помощью библиотеки Apache Velocity. На данной странице рассмотрим основные возможности языка Velocity.
Вывод одного параметраВсе внешние данные, которые поступают в сообщения, попадают в объект data, поэтому для вывода нужного параметра прописываем так:
Вывод элементов из массива по индексамЕсли мы хотим вывести элемент массива по индексу, то указываем название массива и индекс элемента:
$!data.get( ' имя массива ' ).get(0) - если в массиве указаны только значения, где 0 - индекс элемента.
$!data.get( ' имя массива ' ).get(0).get( ' имя параметра ' ) - если в массиве содержатся объекты с параметрами.
Такой способ подходит если размер массива заранее известен. Если указать индекс элемента, которого нет в массиве, то при отправке сообщения будет ошибка.
Получить размер массива Цикл для вывода всех элементов из массиваДля вывода всех элементов массива используется цикл #foreach.
Где $item - переменная, которой будет присвоен текущий элемент массива и к которой можно обращаться внутри цикла. В данном случае будет выведен весь список элементов в массиве поочередно, $velocityCount - по умолчанию имя счетчика цикла и его начальное значение начинается с 1.
Если вы хотите остановить цикл #foreach , вы можете использовать директиву #break , чтобы остановить цикл по нужному условию:
Более подробные примеры использования можете просмотреть на примере передачи заказов или брошенных корзин.
ПрисваиваниеВ качестве значения могут быть конкретные значения, другая переменная или выражение.
СравнениеОператоры сравнения и логические операторы:
Операторы сравнения Velocity
Соответствующие операции сравнения
≥ (больше или равно)
≤ (меньше или равно)
Также доступны операторы для сравнения строк с учетом и без учета регистра.
УсловиеУсловия нам могут пригодиться по нескольким причинам:
если нужно выводить только определенную информацию (например, только одну категорию товаров);
если нужно выводить определенное количество товаров в одном блоке, чтобы не поломать верстку и т.п.
Если условие не выполнено, то можно вывести альтернативный вариант:
Также можно проверить несколько условий:
Можно объединить несколько условий с помощью логических операторов and и or:
Можно инвертировать условие:
Арифметические операцииСложение: $mathTool.add($v1, $v2)
Вычитание: $mathTool.sub($v1, $v2)
Умножение: $mathTool.mul($v1, $v2)
Деление: $mathTool.div($v1, $v2)
Форматирование чисел$numberTool.integer($v1) - выведет целое число без округления.
Для вывода денежных сумм с двумя десятичными знаками можно использовать следующую функцию:
Вывод даты в сообщениеВывести текущую дату можно с помощью функции:
Вывести Unix TimeStamp (текущая дата в миллисекундах):
Можно задать формат вывода даты и/или времени, вторым аргументом можно задать часовой пояс по Гринвичу (GMT):
Если дата передается в формате Unix TimeStamp (например, 1495479520000), то ее можно преобразовать в читабельный формат с помощью функции:
либо с указанием формата:
Операции с датамиПрибавить к дате необходимое число единиц (год, месяц, день, час, минуты). Если из события или дополнительного поля получить дату вида: "date":"01/01/2020 12:00", результат операции будет следующим:
Если в качестве второго аргумента будет отрицательное значение, то будет возвращен результат вычитания.
По умолчанию, ожидается дата в одном из перечисленных форматов.
Если формат отличается, то третьим аргументом можно задать свой формат, например, если передаваемая вами дата в формате " customDate ": "12:00 2020-30-04", тогда выражение примет вид:
Схожим образом, за счет указания четвертого аргумента, можно форматировать дату, например, если дата в формате: "dateTime":"2020-05-01T00:00":
Вычисление разности двух дат в (минутах, днях, месяцах и годах) "firstDate":"01/01/2019", "secondDate":"05/05/2020":
Для нахождения разности обе даты должны быть в одном формате, если ваш формат отличается от ожидаемых по умолчанию, четвертым аргументом можно задать пользовательский формат, например, для двух дат: "customDate1":"17:15 05/05/2020", "customDate2":"10:05 01/01/2019":
Проверка на не пустое значениеЕсли необходимо проверить был ли передан параметр и не был ли он пустой, то можно использовать следующий код:
Это может быть полезно, если в сообщении есть обращение к подписчику, но не у всех подписчиков указаны имена.
Как проверить дополнительные поля контакта описано в данной инструкции.
Работа со строкамиУзнать длину строки:
Получить часть строки:
Заменить часть строки другим значением:
Именить регистр строки:
Это, в принципе, вся краткая необходимая информация, которая может пригодиться при настройке динамического контента в письме. Рассмотреть более подробно документацию по Apache Velocity можно по ссылкам: