Отправка писем менеджерам в зависимости от домена
Материал из Umicms
Если на одной UMI.CMS создается два Интернет магазина, то вполне возможно, что в обработке поступающих заказов на сайт будут принимать участие два менеджера. И необходимо, чтобы в зависимости от того на каком домене был произведен заказ, письмо с уведомлением приходило одному или другому менеджеру. Для реализации описанной выше задачи воспользуемся событием order-status-changed и уже существующим кодом метода sendManagerNotification. В папке classes/modules/emarket/ создадим файл custom_events.php следующего содержания:
<?php
new umiEventListener('order-status-changed', 'emarket', 'onStatusChangedDomain');
?>
Само событие прописано в методе setOrderStatus (order.php):
$event = new umiEventPoint('order-status-changed'); $event->addRef('order', $this); $event->setParam('old-status-id', $oldStatusId); $event->setParam('new-status-id', $newStatusId); ... $event->setMode('after'); $event->call();
В файле classes/modules/emarket/__custom.php, после слов //TODO: Write here your own macroses добавим следующий метод:
public function onStatusChangedDomain(iUmiEventPoint $event) { if($event->getMode() == "after" && $event->getParam("old-status-id") != $event->getParam("new-status-id")) { $order = $event->getRef("order"); $statusId = $order->getValue("status_id"); $codeName = order::getCodeByStatus($statusId); if($codeName != 'waiting') return; $regedit = regedit::getInstance(); $domain_name = $order->domain_id; $domain_id = domainsCollection::getInstance()->getDomainId($domain_name); $mail_arr = array(); // Индекс элемента массива должен быть равен id домена $mail_arr['1'] = array('umi1@umi.ru'); $mail_arr['2'] = array('umi2@umi.ru', 'umi3@umi.ru'); $xslTemplater = xslTemplater::getInstance(); $xslInited = $xslTemplater->setIsInited(false); list($template) = def_module::loadTemplates("tpls/emarket/mail/default.tpl", "neworder_notification"); try { $payment = payment::get($order->payment_id); $paymentName = $payment->name; $paymentStatus = order::getCodeByStatus($order->getPaymentStatus()); } catch(coreException $e) { $paymentName = ""; $paymentStatus = ""; } $content = def_module::parseTemplate($template, array("order_id" => $order->id, "order_name" => $order->name, "order_number" => $order->number, "payment_type" => $paymentName, "payment_status" => $paymentStatus, "price" => $order->getActualPrice(), )); $langs = cmsController::getInstance()->langs; foreach($mail_arr[$domain_id] as $email){ $letter = new umiMail(); $letter->addRecipient($email); $letter->setFrom($regedit->getVal('//modules/emarket/from-email'), $regedit->getVal('//modules/emarket/from-name')); $letter->setSubject($langs['notification-neworder-subject'] . " (#{$order->number})"); $letter->setContent($content); $letter->commit(); $letter->send(); $xslTemplater->setIsInited($xslInited); } } }
В методе прописаны следующие строки:
// Индекс элемента массива должен быть равен id домена
$mail_arr['1'] = array('umi1@umi.ru');
$mail_arr['2'] = array('umi2@umi.ru', 'umi3@umi.ru');
их необходимо отредактировать под вашу задачу, прописав электронные адреса для каждого id домена. Узнать id доменов можно по следующей ссылке: _http://ваш_сайт/admin/config/domains/.xml
В итоге, в зависимости от того на каком сайте был оформлен заказ, письма будут приходить определенным менеджерам.
