Корзина пуста
Войти О магазине FAQ Авторы Хостинг Сообщество
Компонент для работы с рассылками. Написан в качестве демонстрации разработки компонента MODX.
Загрузите дополнение из админки вашего сайта. Как?
Компонент состоит из 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, или из админки

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

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.
  1. Darya Brandina 22 декабря 2013, 14:19 #
    Очень нужная тема! Спасибо!
    1. Михаил Сорокин 13 марта 2014, 15:36 #
      Недоступен в репозитории
      1. Василий Наумкин 13 марта 2014, 15:59 #
        1. Михаил Сорокин 13 марта 2014, 16:02 #
          Видимо дело было в моем хостере. Извиняюсь :)
          1. Василий Наумкин 13 марта 2014, 16:03 #
            Ничего страшного, бывает.

            Именно для подобных случаев существует test.modx.pro.
      2. Андрей Рябченко 23 марта 2014, 21:09 #
        если на одной странице несколько подписок — то подписавшийся всегда попадает в самую первую из них.
        <div>[[!Sendex@weeklyHoroscope?&id=`2`]]</div>
        <div>[[!Sendex@weeklyHoroscope?&id=`3`]]</div>
        <div>[[!Sendex@weeklyHoroscope?&id=`4`]]</div>
        
        тут всегда подписка на рассылку 2

        отписка происходит вроде корректно при чем неважно что вызывается на странице.
        скажем подписчик находится в рассылке с id=6
        «ссылка отписки» ведет на страницу с вызовом
        [[!Sendex?&id=`1`]]
        
        в результате отписывается от 6 рассылки
        1. Андрей Рябченко 23 марта 2014, 21:53 #
          придумал решение для меня.
          в шаблоне подписки указал в форме
          <form action="[[++site_url]]subscribeweeklyhoroscope[[+id]].html" method="post">
          
          соответственно сделал нужное мне количество «спрятанных» документов с вызовом на них
          Сендекса с нужным ИД.
          алиас у них такой: subscribeweeklyhoroscope2 (последняя цифра меняется и соответствует ид рассылки)
          <div style="display:none;">
          [[!Sendex?&id=`2`]]
          </div>
          Вы подписаны на рассылку
          <meta http-equiv="Refresh" content="3; URL=[[!++site_url]]">
          
        2. Комментарий был удален.
          1. Василий Наумкин 23 мая 2014, 10:25 #
            Здесь отзывы.

            Вопросы можно задавать на modx.pro
          2. Марк Львов 09 июня 2014, 12:42 #
            При попытке отправки письма из очереди пишет «SMTP Error: Data not accepted.» кто-нибудь сталкивался?
            1. Комментарий был удален.
              1. Cheizer 06 декабря 2014, 03:18 #
                Спасибо Василий, отличный снипет, но как бы вынести его управление во фронтэнд? :) понимаю, звучит нелепо, но все же.
                1. Евгений Карпов 02 июня 2015, 11:30 #
                  Василий, добрый день!
                  Пользователей можно заносить только вручную или предусмотрен импорт подписчиков, допустим, из экселевского файла?
                  1. Комментарий был удален.
                    1. mike 24 июня 2015, 14:13 #
                      Здравствуйте! Есть такая проблема.
                      Создаю рассылку в разделе Подписки, заполняю данные. Далее пытаюсь добавить ее в разделе Очередь писем. Нажимаю в списке выбора, вижу там свою рассылку, кликаю на нее, но ничего не происходит. (Добавить рассылку в очередь получилось только один раз. После того, как я ее отправил, больше не добавляется ни одна из рассылок.) В консоли браузера и в логах ничего по этой проблеме нет.
                      1. Андрей Завьялов 10 августа 2015, 16:00 #
                        Та же проблема, что и у Mike
                        1. Эрадж Шамс 06 февраля 2016, 05:19 #
                          Отличное дополнение, Спасибо. Было бы круто еще сделать автоматическое отправление при добавлении нового документа определенного шаблона. Это бы пригодилось для блоггеров, чтобы новый пост отправлялся подписчикам.
                          1. Konstantin 07 марта 2016, 10:15 #
                            Шикарное дополнение.
                            Спасибо Василий!!!
                            1. Александр 15 июня 2016, 10:18 #
                              Та же ошибка, что у mike и Андрея Завьялова выше. После того, как один раз отправил, больше не отправляется. Что можно сделать?
                              1. Игорь Гришанов 07 февраля 2017, 08:08 #
                                в modx 2.5.4 не работает часть функционала в админке модуля
                                в чем причина? не успели адаптировать пока?
                                Войдите на сайт, чтобы прокомментировать.
                                График скачиваний дополнения за последние 30 дней. Серым фоном отмечены выходные.
                                Название
                                Sendex
                                Версия
                                1.1.2-pl
                                Дата выпуска
                                26.10.2015
                                Автор выпуска
                                Василий Наумкин
                                Цена
                                Бесплатно
                                Загрузок
                                1 871
                                Версия MODX
                                от 2.2
                                Теги
                                Другие дополнения автора
                                SMF, Ace, mxManager, MobileDetect, msProfile, Comparison, AjaxSnippet, Markdown, debugParser, mspQiwi, AjaxForm, mspRobokassa, msDiscount, AdminPanel, TypoMCE, Office, mSearch2, mspZPayment, PageBreaker, eventsCalendar2, Uploadify, Jevix, Loginza, HybridAuth, Tickets, PhpHypher, DateAgo, Theme.Bootstrap, miniShop2, BannerY, yTranslit, pdoTools, MinifyX, ms2Gallery
                                Поделиться