Sendex - отправка рассылки при публикации ресурса
Небольшой плагин для Sendex - отправка рассылки при публикации ресурса.
Создаем новый плагин, вставляем код, ставим галочку напротив события OnDocPublished, меняем id-шники в начале кода на свои и радуемся.
<?php
/**
** Плагин, при публикации ресурса в указанном разделе, передает текст ресурса
** в шаблон Sendex и отправляет подписку в очередь
**
** OnDocPublished срабатывает только при публикации ресурса через контекстное
** меню документа в дереве ресурсов
**
** В шаблоне sendex в месте куда нужно вставлять контент должен быть
** тег <div id="content"></div>
*/
if ($modx->event->name == 'OnDocPublished') {
$subscrId = 1; // ID подписки Sendex
$subscrTplId = 8; // ID шаблона, указанного в подписке Sendex
$resParent = 5; // ID раздела ресурсы которого будут отправляться в рассылку
if ($resource->get('parent') != $resParent) return;
// Получение шаблона
$response = $modx->runProcessor('element/template/get', array(
'id' => $subscrTplId
));
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'SendexOnNewsPublished - ошибка чтения шаблона. '.$response->getMessage());
return;
} else {
$template = $response->getObject();
}
$newTplContent = preg_replace('/(<div.*?id="content"[^>]*>)(.*?)(<\/div>)/i', '<div id="content">'.$resource->get('content').'</div>', $template['content'], 1);
$data = $template;
$data['content'] = $newTplContent;
// Запись контента новости в шаблон
$response = $modx->runProcessor('element/template/update', $data);
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'SendexOnNewsPublished - ошибка записи в шаблон. '.$response->getMessage());
return;
} else {
$modx->cacheManager->clearCache();
}
// Отправка шаблона в очередь рассылки
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
if ($newsletter = $modx->getObject('sxNewsletter', $subscrId)) {
$response = $newsletter->addQueues();
if ($response !== true) {
echo $response;die;
}
}
// Отправка рассылки
$q = $modx->newQuery('sxQueue');
$q->limit($modx->getOption('sendex_queue_limit', null, 100, true));
$queue = $modx->getCollection('sxQueue');
/** @var sxQueue $email */
foreach ($queue as $email) {
$email->send();
}
}
return;
0
👍
👎
❤️
🔥
😮
😢
😀
😡
1 918
13.02.2014, 14:00:39
8 комментариев
Чикин Артур
13.02.2014, 22:27:05
Прояви фантазию, сделайй плагин который при публикации в каком то разделе, инициализирует рассылку. А в шаблоне рассылки вызови pdoResourses с самой новой публикацией из нужного раздела.
Володя
13.02.2014, 22:33:26
что то вроде такого
Хотя может еще какие варианты есть , sendex не пробовал еще...
AK
14.02.2014, 02:28:50
Спасибо, проявил, следал, поделился http://bezumkin.ru/sections/components/2348/#comment-21990
Василий Наумкин
14.02.2014, 06:37:11
Выглядит неплохо.
Если оформишь отдельной заметкой - подвешу в "Тонкости и трюки".
AK
14.02.2014, 16:13:16
Оформил тут
Алексей Марченко
31.07.2014, 00:57:17
Доброго времени ! Подскажите .. при публикации нового ресурса ... содержимое
в шаблоне перезаписывается ? или не должно ? Спасибо
AK
31.07.2014, 03:22:45
Уже и не помню, судя по коду должно.
Алексей Марченко
31.07.2014, 13:29:03
да вот вроде и мне кажется что должно , но почему то не работает . т.е. одна статья отправляется .. а потом идет отправка повторно той же статьи и шаблон остается тем же ... . Для меня регулярки темный лес ))) ...
bezumkin.ru
Личный сайт Василия Наумкина
Прямой эфир
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так.
А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен.
Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500
Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи.
...
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо!
Извини, тупанул.