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;
← Предыдущая заметка
Переключение контекстов мультиязычного сайта
Следующая заметка →
Уникальное поле профиля пользователя
Комментарии (8)
Чикин Артур
13.02.2014 22:27

Прояви фантазию, сделайй плагин который при публикации в каком то разделе, инициализирует рассылку. А в шаблоне рассылки вызови pdoResourses с самой новой публикацией из нужного раздела.

ВолодянВолодя
13.02.2014 22:33

что то вроде такого

<?php
switch($modx->event->name){
    case 'OnDocPublished':
       {$param = array(
        'pagetitle' => $resource->get('pagetitle'),
        'content' => $resource->get('content') );
        $modx->runSnippet('namesnippet',$param);
       }
    break;
    default:;
}

Хотя может еще какие варианты есть , sendex не пробовал еще...

6192683AK
14.02.2014 02:28

Спасибо, проявил, следал, поделился http://bezumkin.ru/sections/components/2348/#comment-21990

bezumkinВасилий Наумкин
14.02.2014 06:37

Выглядит неплохо.

Если оформишь отдельной заметкой - подвешу в "Тонкости и трюки".

6192683AK
14.02.2014 16:13

Оформил тут

DarkLelikАлексей Марченко
31.07.2014 00:57

Доброго времени ! Подскажите .. при публикации нового ресурса ... содержимое

<div id="content"></div>

в шаблоне перезаписывается ? или не должно ? Спасибо

6192683AK
31.07.2014 03:22

Уже и не помню, судя по коду должно.

DarkLelikАлексей Марченко
31.07.2014 13:29

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

inetlover
Александр Наумов
27.09.2022 22:16
Василий, спасибо тебе большое! Обалдеть, как круто!
Сергей Лелеко
26.09.2022 10:22
Тоже задействовал! Прекрасная функция!
inetlover
Александр Наумов
19.09.2022 11:56
Компонента Sidebar у Bootstrap нет, значит нужны только стили из Bootstrap-Vue @import &#39;~boot...
bezumkin
Василий Наумкин
13.08.2022 14:41
неужели, все глобальное, так просто можно взять и сделать Да, именно так. Мелкие затыки, конечно ж...
bezumkin
Василий Наумкин
13.08.2022 11:18
Killed говорит, что сервер прибивает задачу, скорее всего у провайдера есть какие-то лимиты по нагру...
bezumkin
Василий Наумкин
11.08.2022 18:46
Класс!! Рад, что тебе нравится! нужно добавить @click=&quot;showCart = true&quot; в: Спасибо, попра...
bezumkin
Василий Наумкин
09.08.2022 14:27
На здоровье!
inetlover
Александр Наумов
30.07.2022 22:58
Василий, спасибо большое! Первый вариант помог, не было вот этой настройки: php_value[sys_temp_dir].
bezumkin
Василий Наумкин
06.07.2022 17:06
Базовый Vue, базовый ES 6: импорт-экспорт модулей, вот это всё. Если что-то будет непонятно - просто...
bezumkin
Василий Наумкин
06.07.2022 14:19
Спасибо, что читаешь!