Основи роботи з шаблонами
Шаблони підтримують визначені змінні та спеціальний синтаксис, який надає більше можливостей, ніж статичні шаблони. Тобто певний текст перетворюється за визначеними правилами. Якщо ви працювали з шаблонізатором Twig, то ви вже знаєте майже все необхідне. На цій сторінці описано основний доступний функціонал. Ті, хто бажає дізнатися більше, можуть ознайомитися з офіційною документацією до Twig. Проте не всі можливості Twig доступні в наших шаблонах, тому не забувайте перевіряти результат за допомогою функції попереднього перегляду, а також робити тестові розсилки на власні акаунти перед запуском кампанії на велику кількість реальних користувачів.
Доступні змінні в шаблонах:
- subscriber — це обʼєкт, що містить інформацію про поточного підписника. Переглянути повну структуру цієї змінної можна на окремій сторінці.
- campaign — це обʼєкт, що містить інформацію про поточну кампанію розсилки. Переглянути повну структуру цієї змінної можна на окремій сторінці. Ця змінна не міститиме даних у режимі попереднього перегляду, оскільки він працює поза контекстом будь-якої кампанії розсилки.
- unsubscribe_url — це HTTP-посилання на нашу сторінку, де підписник може відписатися від поточної кампанії розсилки. Якщо у вас є власні налаштування підписки на вашому сайті, ви можете використовувати посилання для відписки, що веде на ваш сайт. Якщо підписник не знайде просту та зручну можливість відписатися від небажаної розсилки, він, імовірно, позначить ваш лист як спам, тому ми рекомендуємо в кожному листі надавати можливість відписки. Ця змінна не буде доступна в режимі попереднього перегляду.
У шаблонах можна використовувати змінні
Для використання змінної її потрібно обгорнути в подвійні фігурні дужки. Наприклад, для виведення змінної test126 потрібно написати {{ test126 }}. Дотримання регістру (великі та малі літери) є обовʼязковим, а пробіли — опціональні. Тобто можна написати {{test126}} або {{ test126 }}, але {{ TESt126 }} — не можна. Змінна test126 є прикладом, насправді такої змінної у нас не існує.
Якщо змінна є складним обʼєктом і має власні властивості, доступ до них здійснюється через крапку. Наприклад, доступ до властивості id змінної subscriber виглядає так: {{ subscriber.id }}. Це реальний приклад — у шаблонах доступна змінна subscriber, і вона має властивість id. Повний перелік властивостей можна переглянути на окремій сторінці. До масивів можна звертатися за індексом, використовуючи квадратні дужки. Водночас потрібно бути впевненим, що такий індекс існує. Наприклад, {{ subscriber.tags[0] }}. Якщо у підписника немає жодного тегу, спроба вивести перший (з індексом 0) тег нічого не виведе (тобто буде виведено «порожній рядок», як кажуть програмісти).
Можна виконувати базові операції з даними
Підтримуються математичні операції:
- додавання
{{ price + tax }} - множення
{{ count * 2 }} - ділення
{{ total / 3 }}
Умовний оператор (IF)
- базовий if
{% if subscriber.is_active %} Ви підписані на розсилку {% endif %} - оператор if з блоком else
{% if subscriber.is_active %} Ви підписані на розсилку {% else %} Ви відписані від розсилки {% endif %} - Ланцюжок перевірок
{% if subscriber.gender == 'male' %} Ви чоловік {% elseif subscriber.gender == 'female' %} Ви жінка {% elseif subscriber.gender == '' %} Ваша стать не вказана {% endif %}
Оператор if обовʼязково має відкривальний тег {% if condition %} і закривальний тег {% endif %}. Усередині можна розмістити будь-яку кількість секцій {% elseif condition %}. Також опціонально можна додати секцію {% else %}, яка спрацює без додаткових умов, якщо виконання дійде до неї. Тобто якщо умови спрацювання (condition) усіх попередніх частин оператора if не виконалися.
Цикли (FOR)
Цикли потрібні для виведення списків. Уявімо, що у нас є список, який зберігається у змінній items. Ось як його можна перебрати:
{% for item in items %} {{ item }}{% endfor %}
Значення змінної item буде різним на кожній ітерації циклу. Усередині циклу також доступні деякі інші змінні, що стосуються поточної ітерації:
- loop.index — номер ітерації, починається з 1
- loop.first — це перша ітерація? (true/false)
- loop.last — це остання ітерація? (true/false)
Цикл можна поєднати з перевіркою на наявність даних:
{% for item in items %} {{ item }}{% else %} Масив items порожній{% endfor %}