Списки и формы подписки¶
Список — тема, в которую человек может вступить и выйти из неё отдельно: рассылка новостей, обновления продукта, события. Люди присоединяются через блок подписки на вашем сайте, собственную форму, API подписки, импорт или через администратора. Эта страница описывает сами списки, блок подписки, действие плагина Form и публичные страницы.
Списки¶
Списки живут на вкладке Audience вместе с тегами и сегментами. В свежей установке есть один: Newsletter, код newsletter, который просит людей подтвердить подписку и является списком по умолчанию.
Чтобы добавить список, откройте Add a list и заполните:
| Поле | Что делает |
|---|---|
| Code | Как список называет форма подписки. Строчные буквы, без пробелов, и он никогда не меняется после создания списка. |
| Name | Что читают люди в центре предпочтений и рядом с флажком. |
| Description | Необязательно. Показывается под именем в центре предпочтений. |
| Ask people to confirm | Двойное подтверждение подписки для этого списка. Новые списки начинают с настройки Ask People to Confirm на вкладке Signup (double_opt_in, включена). Для формы на публичной странице правильный ответ — включено. |
| On the preference center | Предлагать этот список в центре предпочтений, чтобы человек со ссылкой из вашей почты мог вступить в него сам. Выключено означает, что в него вступают через форму, импорт или через вас. |
Щёлкните список, чтобы открыть его страницу: код и настройки, Edit (имя, описание, Ask people to confirm, Default list, On the preference center), Add people (вставьте адреса, см. Подписчиков) и его людей с чипами, где каждый находится в этом списке, и той же панелью массовых действий, что и в таблице Subscribers.
- Default list — куда попадает подписка, не назвавшая список. Назначение одного списка по умолчанию снимает флаг с любого другого.
- Код списка нельзя изменить, потому что каждая форма подписки, импорт и кампания находят список по нему.
- Списки нельзя удалить. Список, который вы больше не используете, может просто оставаться вне центра предпочтений и ваших форм.
- Счётчик списка на вкладке Audience открывает таблицу Subscribers, отфильтрованную по подписанным на него людям.
Блок подписки¶
mailroom_form() рисует блок подписки в любом месте темы или в содержимом страницы:
{{ mailroom_form() }} {# список по умолчанию #}
{{ mailroom_form('newsletter') }} {# один список, по коду #}
{{ mailroom_form('newsletter', {heading: 'Get the newsletter', name: true, source_ref: 'footer'}) }}
Первый аргумент — код списка. Если его нет, он пуст или называет несуществующий список, подписка идёт в список по умолчанию, а не выбрасывается. Второй аргумент — набор параметров:
| Параметр | Что делает |
|---|---|
heading |
Заголовок над блоком. По умолчанию «Join the mailing list»; '' — без заголовка. |
intro |
Строка текста под заголовком. |
button |
Текст кнопки. По умолчанию «Sign me up». |
placeholder |
Подсказка в поле электронной почты. По умолчанию «you@example.com». |
email_label, name_label |
Названия полей. По умолчанию «Email address» и «Your name». |
name |
true добавляет поле имени. |
tags |
Коды тегов, которые ставятся всем, кто подписывается здесь, списком или одной строкой через запятую. |
source_ref |
Ваша заметка о том, откуда они пришли, например footer, хранится у подписчика (до 190 символов). |
lists |
Дополнительные коды списков, предлагаемые флажками (ниже). |
lists_label |
Заголовок над этими флажками. По умолчанию «What would you like to hear about?». |
consent_text |
Другая формулировка рядом с флажком этой формы и формулировка, записываемая для людей, которые через неё подписываются (см. примечание ниже). |
template |
Нарисовать другой partial вместо partials/newsletter-signup.html.twig. |
Примечание
Собственный consent_text формы — это предложение, записываемое для людей, которые через неё подписываются. Форма передаёт его обратно сайту в скрытом поле consent_form, подписанном секретом сайта, поэтому никто не может заявить предложение, которого сайт никогда не показывал. Пустой consent_text показывает Consent Sentence сайта (на вкладке Signup), пока она у сайта есть; флажок исчезает, только когда эта настройка тоже пуста. См. Двойное подтверждение подписки и согласие.
Несколько списков в виде флажков¶
Предложите два или больше списка, и блок рисует их флажками под собственным именем каждого списка, ни один не отмечен:
{{ mailroom_form('newsletter', {lists: ['security', 'events'], lists_label: 'What should we send you?'}) }}
Первый аргумент идёт первым, затем lists, каждый по разу. Код, не называющий список, не предлагается. Человек подписывается на отмеченные списки, и форма не отправится, если не отмечен ни один («Choose at least one list to join.»). Каждый список сохраняет своё Ask people to confirm: тот, что просит подтверждение, оставляет человека ждать, тот, что не просит, подписывает сразу, а список, в котором он уже состоит, не трогается. Сколько бы списков его ни ждали, уходит одно письмо подтверждения, и нажатие подтверждает все.
Если предложено меньше двух списков, блок остаётся обычным блоком для одного списка.
Что делает блок¶
- С JavaScript блок отправляет свои поля как JSON на
{route}/subscribeи печатает ответ там, где была форма: как только подписка принята, поля и кнопка уступают ему место и оно получает фокус, поэтому скринридер его прочитает. Отказ оставляет поля для исправления и прокручивает ответ в поле зрения. - Без JavaScript та же форма отправляется обычно с nonce сайта, и сайт отвечает страницей с тем же предложением.
- Флажок согласия рисуется, когда есть предложение согласия, и его нужно отметить. Форма без флажка не отправляет согласия вообще.
- Поле-ловушка
websiteнаходится за экраном с названием «Leave this field empty». Заполнившему его говорят, что всё получилось, и ничего не записывают. - Ответ одинаков для нового адреса, уже находящегося в списке и исключённого, поэтому форма никогда не выдаёт, читает ли конкретный человек вашу почту.
- Подписки ограничены — Signups Per Hour (
rate_limits.subscribe, 10) с одного адреса посетителя. Одиннадцатая получает «That is a few too many tries.»
Подписка через блок записывается как Signup form (form), с JavaScript или без него.
Изменение разметки¶
Скопируйте templates/partials/newsletter-signup.html.twig из плагина в templates/partials/ вашей темы и редактируйте там. У каждого элемента есть класс mailroom-*, а id формы — mailroom-1, mailroom-1-email и так далее, с нумерацией по форме на странице. Блок оформляется небольшим файлом стилей Mailroom, который есть на каждой странице сайта (поэтому блок оформлен везде, куда вы его поставите) и который выключает Mailroom Stylesheet (pages.builtin_css) на вкладке Public Pages, когда ваша тема сама оформляет эти классы. Его кнопки и флажки берут Accent Color с вкладки Email Design, когда вы её задали, иначе акцент вашей темы, если он у неё есть (у Quark2 есть).
Собственная форма: действие плагина Form¶
Для формы, которую вы определяете плагином Form, добавьте действие mailroom Mailroom в её список process:
form:
name: newsletter-footer
fields:
email:
type: email
label: Email
validate:
required: true
name:
type: text
label: Name
consent:
type: checkbox
label: 'I agree to receive email from this site. I can leave with one click at any time.'
validate:
required: true
buttons:
submit:
type: submit
value: Sign me up
process:
- mailroom:
list: newsletter
tags: [site]
email_field: email
name_field: name
consent_field: consent
- message: 'Thanks. Check your inbox.'
- reset: true
Каждый параметр необязателен:
| Параметр | Что делает |
|---|---|
list |
Код списка. По умолчанию список по умолчанию. |
lists |
Дополнительные коды списков, в которые вступить сразу, списком или одной строкой через запятую. Каждый сохраняет своё двойное подтверждение подписки, с одним письмом подтверждения на всех. |
tags |
Коды тегов для всех, кто подписывается. |
email_field |
Поле с адресом. По умолчанию email. |
name_field |
Поле с именем. |
consent_field |
Флажок согласия. Только поле checkbox, toggle или switch является флажком, который нужно отметить. |
consent_text |
Предложение для записи. Без него записывается название самого поля согласия, затем Consent Sentence сайта. |
language |
Код языка для сохранения у подписчика. |
Адрес, который не является адресом, или неотмеченный флажок согласия задаёт ошибку формы и останавливает остаток списка process. Всё остальное завершается успешно с тем же сообщением, что даёт блок подписки. Подписка записывается как form, с именем формы как source_ref, и считается в том же почасовом ограничении, что и блок подписки.
Публичные страницы¶
Всё, что видит подписчик, отвечает под базовым маршрутом /newsletter, если Route Base (route, на вкладке Public Pages) не говорит иначе:
| Путь | Что это |
|---|---|
POST {route}/subscribe |
Сюда отправляет блок подписки. См. API подписки. |
{route}/confirm/{token} |
Ссылка двойного подтверждения подписки |
{route}/u/{token} |
Отписка |
{route}/p/{token} |
Центр предпочтений |
{route}/v/{token} |
Кампания в браузере |
{route}/o/{token}.gif, {route}/c/{token} |
Пиксель открытия и редирект перехода |
POST {route}/webhook/{provider}/{secret} |
События провайдера. См. Отправку и провайдеров |
Подписанный токен — единственные учётные данные на всех них: ни одна не требует входа, и ни одна никогда не кэшируется (Cache-Control: private, no-store, Referrer-Policy: no-referrer, X-Robots-Tag: noindex, nofollow). Всё остальное под базовым маршрутом проваливается к собственным страницам сайта.
Важно
Задайте базовый маршрут до отправки первой кампании. Уже отправленные ссылки сохраняют базовый маршрут, с которым их отправили. Пустой базовый маршрут читается как /newsletter, поскольку страницы в корне сайта стояли бы перед вашими собственными.
Страницы подтверждения, отписки, предпочтений и сообщения рисуются внутри вашей темы (веб-просмотр — само письмо): они расширяют Page Template (pages.base_template, partials/base.html.twig, когда пусто) и заполняют его блок content. Чтобы изменить страницу, скопируйте её из templates/ плагина в тему под тем же именем: newsletter-confirm.html.twig, newsletter-unsubscribe.html.twig, newsletter-preferences.html.twig или newsletter-message.html.twig.
Страницы-ссылки (подтверждение, отписка, предпочтения, просмотр в браузере) ограничены Link Pages Per Hour (rate_limits.token, 60) на адрес посетителя, а пиксель и редирект перехода — Opens and Clicks Per Hour (rate_limits.tracking, 600). Исчерпанное ограничение пикселя всё равно отдаёт своё изображение, а при переходе отправляет читателя на главную страницу сайта, ничего не записывая.