Вывод дополнительных полей с множественными значениями

В дополнительных полях типа «Строковый», «Целочисленный», «Десятичный», «Перечисление», «Дата», «Дата и время», «Дата и время UTC» можно разрешить принимать множественные значения:

Снимок экрана 2023-09-14 в 17.34.58.png

Это означает, что поле может хранить несколько равноценных значений, каждое их которых можно использовать в фильтрах и выводить в рассылках.

Снимок экрана 2023-09-14 в 17.45.04.png

Такие значения собраны в коллекцию, поэтому для их вывода используется цикл for...end for.

Рассмотрим примеры кода для различных задач.

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

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

Используемые параметры имеют различия в зависимости от типа дополнительного поля.

Тип «Перечисление»

Например, в онлайн-магазине зоотоваров пользователь может указать своих домашних животных, даже если их несколько, чтобы получать актуальные коммуникации:

Снимок экрана 2023-09-13 в 13.40.43.png

В полях типа «Перечисление» можно обращаться как к названию, так и к внешнему идентификатору значения:

Снимок экрана 2023-09-13 в 13.53.02.png

Пример верстки для вывода всех значений:

Ваши питомцы:<br>

@{for pet in Recipient.CustomField.Pets}
— ${pet.Name}<br>
@{end for}
<br>
Никого не забыли? Поправить список можно в личном кабинете.

Клиент со следующими данными:

Снимок экрана 2023-09-13 в 13.44.23.png

Результат в письме:

Ваши питомцы:
- Собаки
- Рыбки

Никого не забыли? Поправить список можно в личном кабинете.

Остальные типы

У отдельных значений строк, дат и чисел нет собственных идентификаторов, поэтому вывод происходит через заданную переменную элемента:

Снимок экрана 2023-09-07 в 17.17.07.png

Например, у товара есть несколько фотографий, все они хранятся в дополнительном поле типа «Строка»:

Снимок экрана 2023-09-07 в 17.19.48.png

Пример верстки для вывода всех изображений:

${Product.Name} снова в наличии!
@{for image in Product.CustomField.AllImages}
    <img src="${image}">
@{end for}

Вывести значения через запятую

Рассмотрим на том же примере, но с другим форматированием:

Ваши питомцы:
@{set all = ""}
@{for pet in Recipient.CustomField.Pets}
    @{if all != ""}
        @{set all = all & ", "}
    @{end if}
    @{set all = all & pet.Name}
@{end for}
${all}
<br>
Никого не забыли? Поправить список можно в личном кабинете.

Результат:

Ваши питомцы: Собаки, Рыбки
Никого не забыли? Поправить список можно в личном кабинете.

Вывести часть значений

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

Пример верстки:

@{for rest in Products.GetBySegment("Restaurants").Take(10)}
<span class="title">${rest.Name}</span> <br>
    @{set counter = 0}
    @{for cat in rest.CustomField.Categories}
        @{if counter < 2}
            ${cat.Name}<br>
            @{set counter = counter + 1}
        @{end if}
    @{end for}
@{end for}

Результат:

Гарцующий Пони
Эль
Сидр

Работа с отдельными значениями

Каждое значение можно форматировать: добавить теги HTML или использовать функции шаблонизатора.

Например, в каталоге косметических средств назначения продукта передаются в дополнительном поле. Нужно выводить их в письме брошенной корзины, чтобы дополнительно мотивировать покупку. Формат: ненумерованный список, строчные буквы.

Пример верстки:

@{for prod in Session.GetAddedToListProducts("Korzina").Take(6)}
${prod.Name}
...
<ul>Применение:
@{for use in prod.CustomField.Usage}
<li><i>${ToLower(use.Name)}</i></li>
@{end for}
</ul>
@{end for}

Результат:

Отшелушивающий тоник
...
    Применение:
  • разглаживает мелкие морщины
  • осветляет пигментные пятна
  • придает коже сияние

Проверить наличие и количество

Проверить поле на наличие значений можно с помощью функции Count

Например, у лекции в дополнительном поле хранятся даты будущих выступлений по той же теме:

Снимок экрана 2023-09-13 в 16.12.14.png

При отмене регистрации пользователю нужно отправить рекомендации, как попасть на лекцию в другое время, если она ещё будет повторяться.

Пример верстки:

Нам жаль, что у вас не получится посетить лекцию. <br><br>
@{if Count(Product.CustomField.AltDate) > 0}
Возможно вам подойдет другое время:<br>
    @{for time in Products.SearchInIdentity("C1").GetByValue("Care").CustomField.AltDate}
        ${FormatDateTime(time, "f")}<br>
    @{end for}
@{end if}

При отмене такой лекции:

Снимок экрана 2023-09-13 в 16.40.49.png

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

Нам жаль, что у вас не получится посетить лекцию.

Возможно вам подойдет другое время:
пятница, 22 сентября 2023 г. 17:00
вторник, 3 октября 2023 г. 20:00
суббота, 25 ноября 2023 г. 12:00

Если же у продукта поле пустое, блок про другие даты будет отсутствовать:

Нам жаль, что у вас не получится посетить лекцию.

Вывести текст в зависимости от значения

Можно персонализировать письма клиентам в зависимости от разных значений поля.

Например, если продукты в заказе сделаны из определенных материалов, нужно вывести советы по уходу за ними.

Пример верстки:

@{for line in Order.Items}
    @{if Count(line.Product.CustomField.CareTips) > 0}
        Советы по уходу:<br>
        @{for item in line.Product.CustomField.CareTips} 
            @{if item.ExternalId = "Suede"}
Избегайте контакта с водой, используйте мягкую щетку для удаления пыли и грязи.
            @{else if item.ExternalId = "Leather"}
Применяйте кремы и масла для увлажнения и сохранения гибкости.
            @{else if item.ExternalId = "Silk"}
Избегайте вытягивания и длительного воздействия солнечных лучей.<br>
            @{end if}
        @{end for}
    @{end if}
@{end for}

При покупке данного продукта:

Снимок экрана 2023-09-07 в 14.52.49.png

В его описании будет:

Советы по уходу:
Применяйте кремы и масла для увлажнения и сохранения гибкости.
Избегайте контакта с водой, используйте мягкую щетку для удаления пыли и грязи.