Компонент Delivery: подписчики и рассылки
Компонент Delivery: подписчики и рассылки пришел на смену компоненту Subscribers. Новый компонент также предоставляет механизмы для формирования базы подписчиков, текстов рассылок, а также создания и отправки почтовых рассылок этим подписчикам.
Не требуется дополнительной установки других компонентов.
Подписка на рассылку
Для вывода формы подписки в любом месте сайта можно воспользоваться вставкой - %subscribe_form{}.
//где-то на странице ...
...
<div>%subscribe_form{}</div>
...
Или вызвать метод:
//где-то на странице ... ... <div><?= $this->delivery->subscribe_form() ?></div> ...
Также форму подписки можно вывести на отдельной странице, которая доступна по адресу /subscribers/subscribe/.
Подписчики
В компоненте предусмотрен механизм формирования базы подписчиков. Пользователи, которые подписались на рассылку, получают письма с подтверждением подписки. Адреса подписавшихся собираются в базе и выводятся в таблице в администраторе (/admin/subscribers/).
Основная информация, которая содержится в таблице - дата подписки, дата подтверждения, дата отписки. Если пользователь прошел по ссылке в письме с целью согласия или отказа от рассылки, даты заносятся в соответствующие поля автоматически.
Есть возможность объединять подписчиков в определенные группы. Для этого нужно создать группу с соответствующим названием (/admin/subscribers/groups/). А при редактировании записи с информацией по подписчику появится дополнительная вкладка со списком групп, где можно будет привязать подписчика к определенной группе.
При формировании рассылки на этапе выбора подписчиков есть возможность производить выбор по определенным группам:
- всем подписчикам;
- выбор из групп;
- загрузка из .csv файла;
- формирование списка вручную;
- выбор всех зарегистрированных пользователей.
Если организация рассылки предполагается для зарегистрированных пользователей, то необходимо, чтобы был установлен компонент Users.
Отписка от рассылки
Отписаться могут только подписавшиеся пользователи, адреса которых попали в базу подписчиков. Для таких получателей в каждом письме рассылки будет выводиться ссылка для отписки.
Установка настроек конфигурирования
Основные настройки для компонента содержатся в файле main.php.
// app/components/Delivery/app/config/main.php return array( 'site_name' => 'Example.ru', 'from' => "robot@example.ru", 'utm_parms' => 'utm_source=site_mail&utm_medium=email_letter&utm_campaign=site_delivery_{:DATE}', 'layout' => 'mail', 'delivery_tpl' => CMS::component_dir('Delivery', 'views/') . 'delivery', 'limit' => 500,
где
- site_name - название сайта, которое будет фигурировать в заголовке письма.
- site_host - хост сайта.
- from - электронный адрес, с которого будет производиться рассылка.
- utm_parms - utm-метка. Будет подставляться во все ссылки в письме.
- layout - шаблон обрамления. По умолчанию берется из app/views/layouts/mail.phtml.
- delivery_tpl - шаблон самого письма.
- limit - максимальное количество писем, отправляемых в одной партии за определенный промежуток времени.
Настройка заданий на рассылку
1. Новую рассылку можно создать в админе (/admin/delivery/). В нее можно прикрепить картинки и прописать их в теле рассылки, либо просто прикрепить какие-нибудь файлы, например, прайс-листы).
2. Когда тело рассылки сформировано, нажимаем кнопку «Разослать» и переходим на форму для выбора списка подписчиков. По умолчанию предлагается производить рассылку всем подписчикам из таблицы (/admin/subscribers/), у которых нет отписок и подписка подтверждена.
К подписанным адресам можно добавлять произвольные адреса или загружать списки адресов. Или вообще вносить только неподписанные адреса.
3. После подтверждения запуска рассылка попадает в список заданий на рассылку (/admin/delivery/tasks/).
В таблице отображается индикация статуса процесса подготовки рассылок.
Настройка крона для отправки рассылок
После того как рассылка сформирована, необходимо настроить ее реальную рассылку в кроне. Для этого необходимо в крон добавить следующие скрипты: delivery_send, delivery_make_task. Например:
*/1 * * * * cd /путь/www/; /usr/local/bin/php index.php delivery_make_task */5 * * * * cd /путь/www/; /usr/local/bin/php index.php delivery_send
Где:
- delivery_make_task - скрипт формирует список подписчиков.
- delivery_send - формирование рассылки.
Скрипт позволяет производить рассылку отдельными партиями с определенной частотой. Количество писем в одной партии задается через файл настроек конфигурации в параметре limit. Частота настраивается в кроне в виде временного промежутка. В примере выше, крон будет проверять каждые 5 минут наличие писем, которые еще не были отосланы, и отсылать новую партию.
Использование переменных в тексте письма
Иногда возникает необходимость вставлять в письма для рассылки какие-либо персонифицированные данные. Для этого можно использовать специальным образом именованные переменные, имеющие синтаксис:
{:переменная}
Для этого в компоненте был реализован класс загрузчика (app/components/Delivery/lib/Recipients/Loader.php), который обрабатывает такие переменные и подставляет нужные данные в них. Для нужд компонента были описаны две переменных:
- {:UNSUBSCRIBE_TEXT} - подключает шаблон, который выводит текст и ссылку для отписки. Используется в шаблоне письма с рассылкой для подписанных посетителей.
- {:DATE} - подставляет текущую дату. Используется в utm-метке, подставляя текущую дату.
Если необходимо описать пользовательскую переменную, то для этого переопределен класс загрузчика (app/component/Delivery/app/Recipients/Loader.php). В нем можно описать все необходимые свойства и методы.
Использование нестандартных шаблонов
Часто для рассылки требуется пользовательский шаблон обрамления вместо стандартного предустановленного шаблона mail или шаблон самого письма. Для этого необходимо создать свой шаблон, например, в папке app/component/Delivery/app/layouts/news-mail.phtml.
И в конфигурационном файле прописать путь до этого шаблона. Например:
// app/components/Delivery/app/config/main.php return array( ... // поменяли шаблон обрамления на пользовательский 'layout' => CMS::component_dir('Delivery', 'app/layouts/news-mail'), 'delivery_tpl' => CMS::component_dir('Delivery', 'views/') . 'delivery', ...