Компонент 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',
	...
03.12.2014
Все статьи