Рассылка по расписанию
Последнее обновление 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
$194 per month—let's make that $500!
Learn moreПоследний урок будет самым коротким. Неожиданно выяснилось, что мы уже всё сделали, и осталось только добавить скрипт отправки писем по расписанию.
На всякий случай напоминаю алгоритм работы компонента:
- Создаём рассылку и указываем её свойства. Обязательно указать шаблон или сниппет.
- Добавляем пользователей (или они добавляются сами через сайт)
- На странице очереди писем добавляем новые, выбирая рассылку. В зависимости от того, что в ней указано, текст письма генерирует сниппет или шаблон.
- Отправляем письма. Можно вручную из админки или скриптом по расписанию.
Всё кроме скрипта мы уже сделали.
Отправка писем по расписанию¶
Учитывая, что всё нужное уже прописано в классе sxQueue, остаётся только подключить модель компонента, выбрать записи и вызвать метод send().
<?php
// This is for calling from the development directory.
if (file_exists(dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/config.core.php')) {
require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/config.core.php';
}
else {
require_once dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . '/config.core.php';
}
// Get the config and call MODX
require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php';
require_once MODX_CONNECTORS_PATH . 'index.php';
// Add a model
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
// Choose 100 letters
$q = $modx->newQuery('sxQueue');
$q->limit($modx->getOption('sendex_queue_limit', null, 100, true));
// We send
$queue = $modx->getCollection('sxQueue');
/** @var sxQueue $email */
foreach ($queue as $email) {
$email->send();
}
После отправки письмо удаляется, поэтому скрипт можно запускать хоть каждые 2 минуты. Нагрузки он не создаст.
Я добавил этот файл в /core/components/sendex/cron/send.php, чтобы его нельзя было вызвать из браузера. Зачем давать возможность непонятно кому отправлять ваши письма?
Добавить его в cron можно вручную (смотрите документацию своего хостинга). Обычно нужно зайти на сервер по SSH, набрать crontab -e и в редакторе добавить:
*/2 * * * * php /var/www/site/www/core/components/sendex/cron/send.php
Сервер будет дергать файл каждые 2 минуты, и все рассылки улетят сразу. На лабораторном тарифе MODXCloud я не смог зайти в SSH. Вероятно, доступ отключён.
В принципе на этом последнее занятие закончено, но добавлю ещё немного про постановку писем в очередь через API.
Добавление писем через API¶
Не знаю, как это сделано в других решениях, но я не представляю, как автоматизировать добавление писем в рассылку.
Ведь ситуаций и условий может быть огромное количество. Рассылка новых тикетов из раздела вопросов или новостей с шаблоном 5 из родителя 13. Всё это в интерфейсе не нарисуешь.
Поэтому автоматическое добавление писем в список мы оставляем на совести разработчика сайта. Мы уже всё для него подготовили:
- Создать сниппет или шаблон, который сформирует тело письма
- Создать рассылку и указать сниппет или шаблон
- Получить объект
sxNewsletterи вызвать методaddQueues
То есть всё очень просто.
На всякий случай вот код:
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
/** @var sxNewsletter $newsletter */
if ($newsletter = $modx->getObject('sxNewsletter', array('name' => 'Newsletter'))) {
$newsletter->addQueues();
}
Этот код можно вызывать при публикации новых страниц, по расписанию или ещё как-то. В своём сниппете или шаблоне вы можете выбирать любые документы и любые условия. В общем, можно наполнять рассылку любой информацией.
Я считаю, это довольно перспективная конструкция, которой будет легко и приятно пользоваться. Тем более мы уже написали всё для ручного управления рассылками.
Заключение¶
На этом наш курс заканчивается.
Задавайте вопросы, будем обсуждать непонятное. В ближайшее время я постараюсь просмотреть код, возможно немного доработать логику и выложить в репозиторий.
За всеми изменениями можно следить на GitHub.
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
$194 per month—let's make that $500!
Learn more










