virtuNewsletter
Последнее обновление not available | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn morevirtuNewsletter: система рассылок для MODX Revolution.
Старые docs см. virtunewsletter.
Загрузка¶
virtuNewsletter скачивается через менеджер MODX Revolution в Package Management или из MODX Extras Repository: https://modx.com/extras/package/virtunewsletter
Разработка и сообщения об ошибках¶
virtuNewsletter на GitHub: https://github.com/virtudraft/virtuNewsletter
Кратко¶
- Настройте формат рассылки через обычный ресурс в дереве слева
- В CMP добавьте category как группу рассылки. К category можно привязать usergroups
- Добавьте newsletter в category
- Выберите « is recurring»: рассылка повторяется по заданному диапазону (weekly, monthly, yearly) и делится на число повторений (1: monthly, 7: weekly, то есть daily).
virtuNewsletter отправляет рассылки через cron.
Note: MODX Cloud сейчас не предоставляет cron как сервис.
Подробнее о настройке cron см. раздел ниже.
Email Templates¶
Нужны email-шаблоны для подтверждений. Это ресурсы, не чанки и не стандартные templates. Их можно не публиковать или скрыть. pagetitle станет subject письма, content: body.
Сниппеты и чанки внутри ресурса обрабатываются. getResources может дать обновления сайта в теле письма. Ресурсы удобнее для нетехнических редакторов, чем HTML в чанке.
Схема назначения ресурсов:

Email «Thank you for your subscription»¶
Шаблон подтверждения подписки. По умолчанию: core/components/virtunewsletter/elements/emails/activation-email.tpl
Update 1.6.0-beta2: шаблон можно создать в CMP и настроить под culture key.
Update 1.6.0-beta-1: [[+virtuNewsletter.email.subid]] = [[+virtuNewsletter.email.id]]
<p>Hello [[+virtuNewsletter.email.name:default=`[[+virtuNewsletter.email.email]]`]],</p>
<p>Thank you for your subscription.</p>
<p>To complete this, please click this link to activate your account:
<a href="[[~62?
&subid=`[[+virtuNewsletter.email.subid]]`
&h=`[[+virtuNewsletter.email.hash]]`
&act=`subscribe`
&scheme=`full`]]"
target="_blank">activate</a>.
</p>
<p>You can unsubscribe back later if it is required.</p>
<p> </p>
<p>Regards,</p>
<p><a href="http://www.example.com" target="_blank">Example.com</a></p>
ID# 62 замените на id ресурса страницы подтверждения с содержимым:
[[!virtuNewsletter.confirm]]
Email «Your subscription has been activated successfully»¶
Update 1.6.0-beta2: шаблон можно создать в CMP и настроить под culture key.
Шаблон подтверждённой подписки. По умолчанию: core/components/virtunewsletter/elements/emails/activated-email.tpl
<p>Thank you.</p>
<p>Your subscription has been activated successfully.</p>
<p>We will send you the upcoming newsletter once they are published.</p>
<p> </p>
<p>Regards,</p>
<p><a href="http://www.example.com" target="_blank">Example.com</a></p>
Email «You have been unsubscribed successfully»¶
Update 1.6.0-beta2: шаблон можно создать в CMP и настроить под culture key.
Шаблон отписки.
В каждой рассылке есть ссылка отписки. Она ведёт на ту же страницу подтверждения, но с действием unsubscribe. По умолчанию: core/components/virtunewsletter/elements/emails/deactivated-email.tpl
<p>Thank you.</p>
<p>Your subscription has been cancelled successfully.</p>
<p>We will no longer send you the upcoming newsletters.</p>
<p> </p>
<p>Regards,</p>
<p><a href="http://www.example.com" target="_blank">Example.com</a></p>
На этом этапе подписчик не удаляется из системы. Он только деактивируется.
System Settings¶
| Settings | Description |
|---|---|
| virtunewsletter.usergroups | Имена usergroups через запятую. Эти группы подписываются автоматически |
| virtunewsletter.email_debug | Включите, чтобы писать плейсхолдеры письма в error log MODX без отправки |
| virtunewsletter.email_limit | Число писем в час для cron. Уточните лимиты у хостера. 0 или пусто: без лимита, все письма одним batch. Default: 50. |
| virtunewsletter.email_sender | Отправитель в header письма. По умолчанию значение emailsender |
| virtunewsletter.subscribe_confirmation_tpl | ID ресурса как email-шаблон новой подписки, как шаблон Thank you for your subscription |
| virtunewsletter.subscribe_succeeded_tpl | ID ресурса как email-шаблон подтверждения отписки |
| virtunewsletter.unsubscribe_succeeded_tpl | ID ресурса как email-шаблон завершённой отписки |
| virtunewsletter.readerpage | ID ресурса, где посетитель читает рассылку в браузере |
Resources, Snippets and Chunks¶
Создайте ещё 3 ресурса со сниппетами:
1. Subscribe¶
Создайте ресурс и поместите сниппет в content.
Example: this is the ID# 61 for the subscribe form below.
[[!virtuNewsletter.subscribe]]
2. Confirm¶
Создайте ресурс и поместите сниппет в content.
Example: this is the ID# 62 in my template examples above.
[[!virtuNewsletter.confirm]]
3. Read¶
Создайте ресурс и поместите сниппет в content.
Example: this is the ID# 63 for the link in the email's body of the newsletter below. This resource will be the website's newsletter reader page. Use the MODX's original BaseTemplate, without any CSS styles.
[[!virtuNewsletter.reader]]
Чтобы вывести плейсхолдеры:
[[!virtuNewsletter.reader? &toArray=`1`]]
4. Chunk¶
Форма подписки (может быть чанком):
<form action="[[~61]]" method="POST">
<p>Email: <input type="email" name="email"></p>
<input type="hidden" name="category" value="Customer News">
<p><input type="submit" name="submit" value="Subscribe"></p>
</form>
NO FORMIT, NO HOOK!
Просто укажите action на Subscribe page выше. Поле category required: подписчик попадёт в нужную Category в CMP.
Снова: УБЕДИТЕСЬ, ЧТО CATEGORY ЕСТЬ В CMP.
Имя поля можно менять, но тогда обновите [[!virtuNewsletter.subscribe? &categoryKey=category]] на Subscribe page
5. Рассылки¶
Теперь можно создавать рассылки через обычный ресурс.
-
Создайте шаблон, который будет телом письма, без тегов html и body.
-
Поместите CSS внутрь тега style. Стили автоматически станут inline в теле письма.
-
Добавьте плейсхолдеры для ссылки отписки или чтения рассылки на сайте:
Update 1.6.0-beta-1: [[+virtuNewsletter.email.newsid]] = [[+virtuNewsletter.email.id]]
<!-- unsubscribe link -->
<a href="[[~62?
&subid=`[[+virtuNewsletter.email.subid]]`
&h=`[[+virtuNewsletter.email.hash]]`
&act=`unsubscribe`
&scheme=`full`
]]">
Unsubscribe
</a>
<!-- read the newsletter on the website -->
<a href="[[~63?
&scheme=`full`
&newsid=`[[+virtuNewsletter.email.newsid]]`
&e=`[[+virtuNewsletter.email.email]]`
&h=`[[+virtuNewsletter.email.hash]]`
]]">read this newsletter on the website</a>
Note: нужен &e или &h. Достаточно одного из них.
Во всех ссылках указывайте &scheme=full, чтобы URL был полным.
Custom Manager Page (CMP)¶
Newsletters¶
Category¶
Category: группа подписчиков. Подписчики из usergroups или анонимные с веб-формы. Форма подписки must содержать поле category (или имя из [[!virtuNewsletter.subscriber? &categoryKey=category]]).
Сначала создайте category в CMP.
Subscribers¶
Здесь зарегистрированные подписчики и auto-registered из virtunewsletter.usergroups. При необходимости синхронизируйте.
Cron¶
На своём хостинге задайте команду:
php -q /home/xxx[absolute_path]xxx/public_html/assets/components/virtunewsletter/conn/web.php action=web/crons/queues/process site_id=modx12abc345678d90.12345678
Аргументы в CLI без «?» и «&».
Для стороннего cron-сервиса укажите URL:
hxxp://www.your_cool_website.com/assets/components/virtunewsletter/conn/web.php?action=web/crons/queues/process&site_id=modx12abc345678d90.12345678
site_id обязателен! Замените site_id=modx12abc345678d90.12345678 на id вашего сайта из core/config/config.inc.php, переменная $site_id. Обновляйте после каждого обновления MODX. Значение меняется!
Heads Up Не делитесь site_id! Это секрет MODX от cross-site scripting. На форуме подменяйте значение!
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn more










