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;

Следующая заметка
Уникальное поле профиля пользователя
Предыдущая заметка
Модификации товара. Учет остатков. Галерея.
  • 13 февраля 2014, 14:00
  • AK
  • 2540


Комментарии ()

  1. Чикин Артур 13 февраля 2014, 18:27 # 0
    Прояви фантазию, сделайй плагин который при публикации в каком то разделе, инициализирует рассылку. А в шаблоне рассылки вызови pdoResourses с самой новой публикацией из нужного раздела.
    1. Володя 13 февраля 2014, 18:33 # 0
      что то вроде такого
      <?php
      switch($modx->event->name){
          case 'OnDocPublished':
             {$param = array(
              'pagetitle' => $resource->get('pagetitle'),
              'content' => $resource->get('content') );
              $modx->runSnippet('namesnippet',$param);
             }
          break;
          default:;
      }
      Хотя может еще какие варианты есть, sendex не пробовал еще…
      1. AK 13 февраля 2014, 22:28 # +1
        Спасибо, проявил, следал, поделился
        bezumkin.ru/sections/components/2348/#comment-21990
        1. Василий Наумкин 14 февраля 2014, 02:37 # 0
          Выглядит неплохо.

          Если оформишь отдельной заметкой — подвешу в «Тонкости и трюки».
          1. AK 14 февраля 2014, 12:13 # 0
            Оформил тут
            1. Алексей Марченко 30 июля 2014, 20:57 # 0
              Доброго времени! Подскажите… при публикации нового ресурса…
              содержимое
              <div id="content"></div>
              в шаблоне перезаписывается? или не должно?
              Спасибо
              1. AK 30 июля 2014, 23:22 # 0
                Уже и не помню, судя по коду должно.
                1. Алексей Марченко 31 июля 2014, 09:29 # 0
                  да вот вроде и мне кажется что должно, но почему то не работает. т.е. одна статья отправляется… а потом идет отправка повторно той же статьи и шаблон остается тем же…. Для меня регулярки темный лес )))…
        Добавление новых комментариев отключено.