Отправка писем менеджерам в зависимости от домена — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
 
----
 
----
'''Внимание!'''
+
'''Внимание!'''<br />
 
Настроить уведомления менеджерам, в зависимости от домена, Вы можете в настройках модуля "Интернет-магазин", на вкладке "Настройки уведомлений".<br />
 
Настроить уведомления менеджерам, в зависимости от домена, Вы можете в настройках модуля "Интернет-магазин", на вкладке "Настройки уведомлений".<br />
 
Начиная с версии 2.8.5.1, эта вкладка содержит секцию "Уведомления о смене статуса" и секции для настройки уведомлений (собственная секция для каждого домена в системе).
 
Начиная с версии 2.8.5.1, эта вкладка содержит секцию "Уведомления о смене статуса" и секции для настройки уведомлений (собственная секция для каждого домена в системе).

Версия 05:47, 5 июня 2012


Внимание!
Настроить уведомления менеджерам, в зависимости от домена, Вы можете в настройках модуля "Интернет-магазин", на вкладке "Настройки уведомлений".
Начиная с версии 2.8.5.1, эта вкладка содержит секцию "Уведомления о смене статуса" и секции для настройки уведомлений (собственная секция для каждого домена в системе).


Если на одной 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

В итоге, в зависимости от того на каком сайте был оформлен заказ, письма будут приходить определенным менеджерам.