Sendex

Компонент для работы с рассылками. Написан в качестве демонстрации разработки компонента MODX.
Версия 1.1.4-pl
Дата выпуска 26.12.2022
Загрузки 3 673
Просмотры 20 921
Внимание, этот компонент требует версию PHP 7.0 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Компонент состоит из 3х объектов, которые хранятся в отдельных таблицах:
  • sxNewsletter — объект подписки со всеми параметрами: тема, от кого, шаблон оформления и т.д.
  • sxSubscriber — объект подписчик. Здесь обязательно есть email и id подписки. Если юзер был авторизован в момент подписки — то и его id.
  • sxQueue — объект письма, стоящего в очереди на отправку со всеми свойствами.

Sendex может полностью управляться в ручном режиме из админки.

Создаём рассылку:

Для нормальной работы обязательно нужно указать шаблон письма (один поставляется в комплекте), в котором вы можете вызывать любые сниппеты.

Подписываем пользователя:

В ручном режиме подписать можно только юзера сайта, но компонент работает и с анонимами.

Генерируем письма для всех подписчиков рассылки:

Рассылка смотрит в список подписавшихся и генерирует для них письма, согласно своих настроек.

Отправляем:


Понятное дело, что основную часть работы можно автоматизировать, и кое-что для этого предусмотрено.

Сниппет Sendex


Сниппет очень простенький, и позволяет юзерам самостоятельно работать с подпиской: подписываться и отписываться.

Если пользователь авторизован, ему нужно просто нажать на кнопку. Если нет — ему нужно будет подтвердить свой email.

Также, если авторизованный пользователь уже подписан на рассылку — ему показывается кнопка для отписки. Анонимы смогут отписаться по ссылке из письма.

Сниппет — это просто пример логики работы, потому что все нужные методы содержатся в классе sxNewsletter и вы можете легко написать свой сниппет, с их использованием.

Основные методы объектов


Объект sxNewsletter
  • addQueues — проходит по своим подписчикам и добавляет для них письма в очередь
  • checkEmail — отправка проверочного кода на email анонимного юзера
  • confirmEmail — подтверждение email анонимного юзера
  • Subscribe — подписка на рассылку любого юзера, по id или email
  • unSubscribe — отписка от рассылки, по уникальному коду подписчика в sxSubscriber
  • isSubscribed — проверка, подписан ли юзер на рассылку по email или id. Возвращает id sxSubscriber или 0.

После создания рассылки её можно получить через MODX API и вызвать генерацию писем:
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');

/** @var sxNewsletter $newsletter */
if ($newsletter = $modx->getObject('sxNewsletter', 1)) {
	$response = $newsletter->addQueues();
	if ($response !== true) {
		echo $response;die;
	}
}
Метод вернет true или текст ошибки.

Объект sxSubscriber ничего интересного не содержит. Разве что, уникальное поле code, при передаче которого в метод sxNewsletter::unSubscribe() юзер будет отписан от рассылки. Обратите внимание, что само наличие этого объекта — и есть подписка юзера. То есть, при отписке sxSubscriber удаляется.

Объект sxQueue
  • send — отправка письма. Если удачно — оно удаляется из очереди, если нет — выдаёт ошибку и остаётся для следующей попытки.

Таким образом, для отправки всех писем из очереди можно делать так:
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');

$q = $modx->newQuery('sxQueue');
$queue = $modx->getCollection('sxQueue');
/** @var sxQueue $email */
foreach ($queue as $email) {
	$email->send();
}


Именно так и работает скрипт отправки писем по cron, который лежит в /core/components/sendex/cron/send.php.

Заключение


Итак, вам нужно

  1. Оформить шаблон, создать рассылку и указать его ей.
  2. Подписать юзеров вручную, или через сниппет.
  3. При наступлении како-то события или через api сгенерировать письма.
  4. Отправить письма по расписаниею через cron, или из админки

Возможно, выглядит это немного сложновато, но на самом деле всё очень просто. Просто нужно понять логику и тогда вы сможете организовать любую рассылку, и автоматизировать её как захотите.

1.1.4-pl

  • [#37] Added functionality to export email addresses
  • Fix css bug for user group combo

1.1.3-pl

  • [#32, #33] Added parameter &msgClass for placeholder [[+class]]
  • [#31] Added messages for frontend
  • [#30] Change phptype text to string

1.1.2-pl

  • [#23] Added button for removing all letters from queue

1.1.1-pl

  • Fixed modUserProfile getting on creating subscriber

1.1.0-pl

  • Improved installation script for MODX 2.4.

1.1.0-rc

  • UI improvements.
  • Ability to add all users of the group to the newsletter.
  • Added multiselect in all grids.
  • Added subscribers count in newsletters grid.
  • Added buttons to grids for touch devices.
  • Added Font Awesome icons for MODX < 2.3.
  • [#21] Compatibility with MODX 2.3.
  • [#20] Added "send all" button to queues grid.

1.0.0-pl

  • Added multiremoving and multisending
  • [#11]Added $_GET's subscribed, unsubscribed, confirmed
  • [#1] Fixed urls of images

1.0.0-rc2

  • Various small fixes.

==============

  • Fixed caching of template.

1.0.0-beta

  • Initial release.

Последние обсуждения в сообществе MODX.pro