Динамический контент в письмах. Velocity.

Динамический контент в сообщениях используется для подстановки нужных данных или настроек для отправки пользователю. Например, товары по оформленному заказу, имя клиента или его персональный промокод. С введением в эту тему и более простыми методами можно ознакомиться в статье /blog/dinamicheskiy-kontent-v-pismah

В системе eSputnik возможность динамического контента реализована с помощью библиотеки Apache Velocity. На данной странице рассмотрим основные возможности языка Velocity.

Вывод одного параметра

Все внешние данные, которые поступают в сообщения, попадают в объект data, поэтому для вывода нужного параметра прописываем так:

$!data.get('имя параметра')

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

Если мы хотим вывести элемент массива по индексу, то указываем название массива и индекс элемента:

$!data.get('имя массива').get(0) - если в массиве указаны только значения, где 0 - индекс элемента.

$!data.get('имя массива').get(0).get('имя параметра') - если в массиве содержатся объекты с параметрами.

Такой способ подходит если размер массива заранее известен. Если указать индекс элемента, которого нет в массиве, то при отправке сообщения будет ошибка.

Получить размер массива

$!data.get('имя массива').size()

Цикл для вывода всех элементов из массива

Для вывода всех элементов массива используется цикл #foreach.

Синтаксис:

#foreach($item in $data.get('название массива'))

<div>$item.get('name') ... </div>

#end

Где $item - переменная, которой будет присвоен текущий элемент массива и к которой можно обращаться внутри цикла. В данном случае будет выведен весь список элементов в массиве поочередно.

Более подробные примеры использования можете просмотреть на примере передачи заказов /support/rabota-s-zakazami#messages

или брошенных корзин /support/broshennye-korziny#message

Присваивание

Синтаксис:

#set($var='значение')

В качестве значения могут быть конкретные значения, другая переменная или выражение.

Сравнение

Операторы сравнения:

Операторы сравнения Velocity

Соответствующие операции сравнения

gt

> (больше)

lt

< (меньше)

ge

≥ (больше или равно)

le

≤ (меньше или равно)

==

= (равно)

!=

≠ (не равно)

Синтаксис:

$!param1 gt $!param2

Условие

Условия нам могут пригодиться по нескольким причинам:

  • если нужно выводить только определенную информацию (например, только одну категорию товаров);

  • если нужно выводить определенное количество товаров в одном блоке, чтобы не поломать верстку и т.п.


Синтаксис:

#if ($data.get('params')=='значение')

(контент)

#end

Если условие не выполнено, то можно вывести альтернативный вариант:

#if($data.get('param')=='значение')

(контент)

#else

(альтернативный контент)

#end

Также можно проверить несколько условий:

#if($data.get('param')=='значение1')

(контент 1)

#elseif($data.get('param')=='значение2')

(контент 2)

#else

(альтернативный контент)

#end

Можно объединить несколько условий с помощью логических операторов and и or:

#if ($data.get('param1')=='значение1' and $data.get('param2')=='значение2')

(контент)

#end

Можно инвертировать условие:

#if (!($data.get('param')=='значение'))

(контент)

#end

Арифметические операции

Сложение: $mathTool.add($v1, $v2)

Вычитание: $mathTool.sub($v1, $v2)

Умножение: $mathTool.mul($v1, $v2)

Деление: $mathTool.div($v1, $v2)

Форматирование чисел

$numberTool.integer($v1) - выведет целое число без округления.

Для вывода денежных сумм с двумя десятичными знаками можно использовать следующую функцию:

$!numberTool.format('#.00',$v1)

Вывод даты в сообщение

Вывести текущую дату можно с помощью функции:

$!dateTool.currentDate()

Можно задать формат вывода даты и/или времени:

$!dateTool.currentDate('dd.MM.yyyy HH:mm:ss')

Если дата передается в формате Unix TimeStamp (например, 1495479520000), то ее можно преобразовать в читабельный формат с помощью функции:

$!dateTool.formatDate('dd.MM.yyyy',$!data.get('date'))

либо с указанием формата:

$!dateTool.formatDate('yyyy-MM-dd HH:mm:ss',$!data.get('date'))

Проверка на не пустое значение

Если необходимо проверить был ли передан параметр и не был ли он пустой, то можно использовать следующий код:
#if($data.get('param') and $data.get('param')!=’’)

(контент)

#end

Это может быть полезно, если в сообщении есть обращение к подписчику, но не у всех подписчиков указаны имена.

Работа со строками

Узнать длину строки:

$!var.length()

Получить часть строки:

$!var.substring(индекс начала,индекс конца)

Заменить часть строки другим значением:

$!var.replace('что нужно изменить','на что нужно изменить')

Это, в принципе, вся краткая необходимая информация, которая может пригодится при настройке динамического контента в письме. Рассмотреть более подробно документацию по Apache Velocity можно по ссылкам:

http://velocity.apache.org/engine/1.7/user-guide.html

http://people.apache.org/~henning/velocity/html/index.html