Разная почта менеджера в зависимости от варианта доставки
Доброго времени суток, уважаемое сообщество!
Возникла необходимость отправлять письмо о новом заказе на разных менеджеров — разные email-адреса (в зависимости от выбранного клиентом варианта доставки). Облазил казалось бы все, но как внедрить такой функционал так и не понял :(
Упоминание о email менеджера нашел только в файле 'core/components/minishop2/model/minishop2/minishop2.class.php' в этой строке:
Очень прошу помощи у сообщества. Заранее благодарен.
Вроде получилось. Выкладываю полностью код плагина, может кому-нибуть пригодится:
P.S. Если кто-то сможет подсказать более правильный/лучший вариант решения данной задачи — буду только благодарен.
Возникла необходимость отправлять письмо о новом заказе на разных менеджеров — разные email-адреса (в зависимости от выбранного клиентом варианта доставки). Облазил казалось бы все, но как внедрить такой функционал так и не понял :(
Упоминание о email менеджера нашел только в файле 'core/components/minishop2/model/minishop2/minishop2.class.php' в этой строке:
$emails = array_map('trim', explode(',',$this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender'))));Как сделать правильно без «ковыряния» исходных файлов, к сожалению не хватает знаний.Очень прошу помощи у сообщества. Заранее благодарен.
Вроде получилось. Выкладываю полностью код плагина, может кому-нибуть пригодится:
switch ($modx->event->name) {
case 'msOnChangeOrderStatus':
if ($status==1) { // если заказ в статусе "Новый"
$delivery_id = $order->get('delivery');
$order_num = $order->get('num');
if ($delivery_id == 1) { // если выбран метод доставки "Самовывоз" (ID=1)
$pls = $order->toArray(); // массив данных заказа
$tpl = 'tpl.OrderEmail.new.manager'; // чанк шаблона оформления письма о новом заказе для менеджера
$email_from = $modx->getOption('emailsender'); // эл.адрес оправителя письма
$sitename = $modx->getOption('site_name'); // имя/название отправителя письма
$email_to = 'manager@store.com'; // эл.адрес получателя письма (менеджера)
$subject = 'У вас новый заказ #' . $order_num; // тема письма
$body = $modx->runSnippet('msGetOrder', array_merge($pls, array('tpl' => $tpl)));
// отправка письма
if ($email_to != '') {
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$body);
$modx->mail->set(modMail::MAIL_FROM,$email_from);
$modx->mail->set(modMail::MAIL_FROM_NAME,$sitename);
$modx->mail->set(modMail::MAIL_SUBJECT,$subject);
$modx->mail->address('to',$email_to);
// $modx->mail->address('reply-to','me@xexample.org'); // - раскомментировать и указать email на который хотите отправить копию этого письма
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
}
}
}
break;
}Незабываем повесить плагин на событие msOnChangeOrderStatus.P.S. Если кто-то сможет подсказать более правильный/лучший вариант решения данной задачи — буду только благодарен.
Комментарии: 3
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
В нем извлекаете статус и доставку, далее отсылаете письмо.
А в настройках самого minishop для статуса «Новый» убираете галочку с «Письмо менеджеру»
Я создал плагин с таким содержимиым:
Блок с генерацией письма менеджеру я попытался взять с файла minishop2.class.php:
Но, оно начало ругатся на использование пользовательских функций formatPrice() и get().
Могли бы подсказать как правильно переписать эти запросы, чтобы письмо менеджеру отправлялось по старндартному шаблону указаному в настройках минишопа.
Буду очень благодарен за помощь.
Получится что-то вроде такого
А вам даже не нужен, вы же отключили его, хотя иной раз можно сделать проверку, чтобы переключать функционал оповещения (т.е. при включенном оповещении, основное содержимое плагина не будет выполняться.