Перейти к основному содержимому
Обновлено: 

Обработка и вывод данных из YML-файла

Что такое YML

YML-файл содержит данные о товарах: названия, цены, ссылки, изображения, категории и другие параметры. Эти данные можно использовать в письмах — например, чтобы подставлять товары в e-commerce сценариях: Брошенная корзина, Брошенный просмотр и других.

В письмах YML-файл используется как внешний источник данных. Чтобы обратиться к этим данным, файл нужно подключить через Модуль Продажи, а в шаблоне письма загрузить его и получить нужную информацию с помощью функций шаблонизатора.

Все поля товаров (name, price, picture, param и другие) формируются на основе структуры YML-файла.

Дополнительные разделы в YML-файле

Как подключить YML-файл

Перед использованием в письме данных из YML-файла, его нужно подключить через Модуль Продажи.

После подключения к информации из файла можно обращаться в шаблоне письма. Загрузка данных происходит в момент формирования письма, поэтому URL файла может быть динамическим.

Данные из YML-файла можно использовать при всех способах отправки писем, включая отправку через Stream-API и SMTP.

Как вывести данные из YML-файла в письме

Для загрузки YML-файла в шаблон письма используйте функцию yml_load():

[% yml = yml_load("URL_YML_ФАЙЛА") %]

Если при загрузке происходит ошибка, по умолчанию письмо отменяется. Это поведение можно изменить с помощью параметра ignore_error — с ним рассылка выйдет, даже если YML-файл недоступен:

[% yml = yml_load("URL_YML_ФАЙЛА", "ignore_error", 1) %]

В этом случае функция вернёт значение undef, а результат нужно обработать вручную.

Получение данных

Функции вида yml_xxx_get() возвращают объект, если элемент найден, или undef, если нет.

[% offer = yml_offer_get(yml, "ID_ТОВАРА") %]

После этого можно обращаться к свойствам товара:

[% offer.name %]
[% offer.price %]
[% offer.url %]

Функции вида yml_xxx_list() возвращают список всех id элементов указанного типа.

[% offer_ids = yml_offer_list(yml) %]

Затем для каждого id можно получить объект товара через yml_offer_get().

Поле picture в YML-файлах может содержать одно изображение или массив изображений. Чтобы корректно вывести изображение, используйте проверку:

[% IF offer.picture[0] %]
[% offer.picture[0] %]
[% ELSE %]
[% offer.picture %]
[% END %]

Вывод данных, собранных для сценариев Модуля Продажи

Брошенная корзина

Вывод товаров, которые находятся в корзине пользователя:

[% yml = yml_load("URL_YML_ФАЙЛА", "ignore_error", 1) %]
[% basket = ssecquery('basket') %]

[% FOREACH item IN basket[0].items %]
[% offer = yml_offer_get(yml, item.product.id) %]
[% NEXT IF offer == undef %]

<a href="[% offer.url %]">
<img src="[% IF offer.picture[0] %][% offer.picture[0] %][% ELSE %][% offer.picture %][% END %]">
</a><br>
<a href="[% offer.url %]">[% offer.name %]</a><br>
Цена: [% offer.price %] руб.<br>
Количество: [% item.product.qnt %] шт<br>
Стоимость: [% offer.price * item.product.qnt %] руб.<br>
[% END %]

Брошенный просмотр

Вывод последних просмотренных товаров пользователя:

[% yml = yml_load("URL_YML_ФАЙЛА", "ignore_error", 1) %]
[% views = ssecquery('product_view', 'dt', '>', 'current - 24 hours') %]
[% used_ids = [] %]
[% shown = 0 %]

[% FOREACH v IN views %]
[% NEXT IF exists_val(used_ids, v.product.id) %]
[% used_ids.push(v.product.id) %]

[% offer = yml_offer_get(yml, v.product.id) %]
[% NEXT IF offer == undef %]

<a href="[% offer.url %]"><img src="[% offer.picture[0] %]"></a><br>
<a href="[% offer.url %]">[% offer.name %]</a><br>
[% offer.price %] руб.<br>

[% shown = shown + 1 %]
[% LAST IF shown >= 6 %]
[% END %]

Брошенная категория

Вывод товаров из категории, которую пользователь просматривал последней:

[% yml = yml_load("URL_YML_ФАЙЛА", "ignore_error", 1) %]
[% category_views = ssecquery('category_view', 'dt', '>', 'current - 1 day') %]
[% category_id = category_views[0].product.category_id %]

[% offer_ids = yml_offer_list(yml) %]
[% result = [] %]

[% FOREACH id IN offer_ids %]
[% offer = yml_offer_get(yml, id) %]
[% IF offer != undef AND offer.categoryId == category_id AND offer.available == 'true' %]
[% result.push(offer) %]
[% END %]
[% LAST IF result.size() >= 6 %]
[% END %]

[% IF result.size() < 1 %]
[% Cancel_Letter() %]
[% END %]

[% FOREACH offer IN result %]
<a href="[% offer.url %]"><img src="[% IF offer.picture[0] %][% offer.picture[0] %][% ELSE %][% offer.picture %][% END %]"></a><br>
<a href="[% offer.url %]">[% offer.name %]</a><br>
[% offer.price %] руб.<br>
[% END %]

Читайте также:
Дополнительные разделы в YML-файле