We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2750
    • 115 Posts
    Добрый день!
    Возникла необходимость реализовать такую функциональность: при добавлении нового материала в определенный контейнер, нужно высылать на адреса зарегистрированных пользователей определенной группы сообщение.

    На деле: есть группа "пользователи ПО" и как только в каталоге "Обновления ПО" добавится новое обновление - они должны быть уведомлены.

    Хотел бы спросить совета у более опытных разработчиков.
    1. Думаю, что реализовывать нужно это дело с помощью плагина. И слушать событие OnBeforeDocFormSave поскольку если использовать событие OnDocFormSave, то высылаться будет сообщение каждый раз, если даже отредактировать сопроводительный текст в обновлении. Правильно или нет?
    2. При наступлении события OnDocFormSave думаю написать что-то типа такого:
    $e =& $modx->event;
    switch ($e->name ) {
    	// если наступило событие "перед сохранением документа"
    	case 'OnDocFormSave':
    		{
    			// получаем id сохраняемого документа
    			$docId = $modx->documentObject['id'];
    			// ищем информацию о сохраняемом объекте  в базе
    			$checkDoc = $modx->getDocument($docId);
    			// если не найдено ничего - значит объет создается, а не редактируется
    			if (empty($checkDoc)) {
    				// проверяем, является ли создаваемый документ обновлением ПО
    				if ($modx->documentObject['parent'] == 33) {
    					// вот тут нужно вызвать функцию, которая отправит сообщение пользователям
    					// думал в сторону eForm глянуть, но как сэмулировать программно нажатие кнопки отправить,
    					// что-то не допёр...помогите плз.
    				}
    			} 
    			break ;
    		}	
      default:
      return ;
    }


    ps прокомментируйте плз, если я что-то не так написал
      • 785
      • 2,113 Posts
      Все лучше иначе сделать (для OnDocFormSave).
      Для получения $id (если он действительно нужен):
      $id = $e->params[’id’]
      или
      global $id
      А для определения, добавление или редактирование:
      $e->params[’mode’] == "new"
      Родителя (и любое другое поле) можно определить, задав:
      global $parent

      А для отправки почты лучше всего использовать PHPMailer.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 2750
        • 115 Posts
        Создаю сниппет с таким кодом:
        <?php
        global $modx;
        $to = '[email protected]';
        function sendEmail($to) {
        	$subject = 'test message from my plugin';
        	$headers  = "MIME-Version: 1.0\\n".
        		"Content-type: text/html; charset={$modx->config['modx_charset']}\n".
        		"From: MODx\\n".
        		"Reply-To: no-reply@{$_SERVER['HTTP_HOST']}\\n".
        		"X-Mailer: PHP/".phpversion();
        	$body = '<p>my first test message body content</p>';
        
        	$mail = mail($to, $subject, $body, $headers);
        }
        sendEmail($to); 	
        ?>

        открываю страницу, на которой вызывается сниппет - письмо отправляется.
        Далее, я создаю плагин с таким кодом:
        <?php
        global $modx;
        $to = '[email protected]';
        function sendEmail($to) {
        	$subject = 'test message from my plugin';
        	$headers  = "MIME-Version: 1.0\\n".
        		"Content-type: text/html; charset={$modx->config['modx_charset']}\n".
        		"From: MODx\\n".
        		"Reply-To: no-reply@{$_SERVER['HTTP_HOST']}\\n".
        		"X-Mailer: PHP/".phpversion();
        	$body = '<p>my first test message body content</p>';
        
        	$mail = mail($to, $subject, $body, $headers);
        }
        	
        $e =& $modx->event;
        switch ($e->name ) {
          case 'OnDocFormSave':
        		{
        			sendEmail($to); 
        			break ;
        		}
        	default:
        		return ;	
        }
        ?>

        Отмечаю в событиях плагина OnDocFormSave и при сохранении документа, как нового, так и при редактировании существующего почта не отправляется....что я упустил? Код ведь рабочий...вариант со сниппетом отправляет...
          • 785
          • 2,113 Posts
          Не $e =& $modx->event а $e = &$modx->event
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации