|
|
23.05.2014, 08:53
|
|
Shnit
Зарегистрирован: 2009-08-05
Сообщений: 3
|
Товарищи, подскажите как программно изменять статус заказа, чтобы отрабатывали события - "высылать письмо при переходе заказа в данный статус"?
|
|
|
24.05.2014, 19:57
|
|
Руслан Густокашин
Студия Вэлпис
Зарегистрирован: 2012-02-06
Сообщений: 962
|
Хе, а ведь интересный вопрос! Тоже интересует. Если найдете ответ - дайте знать, пожалуйста.
|
|
|
25.05.2014, 15:11
|
|
Nexwich
Панасин Александр
Зарегистрирован: 2011-04-05
Сообщений: 1037
|
Событие состоит из действия(checked) и названия сущности(Comment)
Например checkedComment
http://www.netcat.ru/developers/docs/events/
Часть 1 (сообщение системе о событии)
Вам необходимо транслировать события
$nc_core->event->execute в первом параметре передаете "Событие" а далее "Параметры"
Таким образом для того чтобы проверить Что "включили сайт" необходимо
$nc_core->event->execute("checkCatalogue",Catalogue_ID)
А для проверки "удаления компонента из раздела"
$nc_core->event->execute("dropSubClass",Catalogue_ID, Subdivision_ID, Sub_Class_ID)
http://www.netcat.ru/developers/docs/events/system-events/
Внимание! Последний параметр в транслируемом событии может быть как целым числом (в случае, если в действии участвовал один объект), так и массивом чисел (при групповом действии). Методы-слушатели должны учитывать это.
Пример
Код:// обновление статуса
$db->query("UPDATE Message2045 SET status=2 WHERE Message_ID=5");
// трансляция события
$nc_core->event->execute("updateMessage", 1, 45, 65, 2045, 5);
Часть 2 (прикрепление события)
Для обработки вашей пользовательской функции(дополнительный метод) необходимо во втором параметре передать массив туда будут переданы параметры из таблицы
http://www.netcat.ru/developers/docs/events/system-events/
Пример
Код можно поместить в модуль «Интерфейс разработчика», в файл /netcat/modules/default/function.inc.php
Код:class ListenUpdateMessage {
public function __construct () {
$nc_core = nc_Core::get_object();
$nc_core->event->bind($this, array("updateMessage" => "updateMessageStatus"));
}
public function updateMessageStatus ( $Catalogue_ID, $Subdivision_ID, $Sub_Class_ID, $Class_ID, $Message_ID ) {
$nc_core = nc_Core::get_object();
$system_env = $nc_core->get_settings();
$status = $nc_core->message->get_by_id( $Class_ID, $Message_ID, "status");
$mailer = new CMIMEMail();
$mailer->mailbody('Статус заказа изменился на '.$status);
$mailer->send('admin@example.com',$system_env['SpamFromEmail'],$system_env['SpamFromEmail'],'Изменение статуса заказа',$system_env['SpamFromName']);
return 0;
}
}
$listenObj = new ListenUpdateMessage();
В итоге в первой части мы транслировали событие системе и когда она его услышала то выполнила вторую часть
Модуль "Почтовые уведомления" – настройка email уведомлений на вашем сайте без программирования. Бесплатно. http://netcat.ru/products/CatStore/solution_242.html
|
|
|
25.05.2014, 21:59
|
|
Shnit
Зарегистрирован: 2009-08-05
Сообщений: 3
|
Решил вопрос таким способом:
Код:
$netshop = nc_netshop::get_instance();
$order = $netshop->load_order($order_id);
$order->set('Status', $new_status);
$netshop->mailer->process_order_status_change($order);
$order->save();
в функции process_order_status_change идет проверка на необходимость отправки писем в зависимости от статуса заказа..
|
|
|
26.05.2014, 11:28
|
|
Nexwich
Панасин Александр
Зарегистрирован: 2011-04-05
Сообщений: 1037
|
Вы ведь хотели через систему событий. Почему решили делать без нее?
Модуль "Почтовые уведомления" – настройка email уведомлений на вашем сайте без программирования. Бесплатно. http://netcat.ru/products/CatStore/solution_242.html
|
|
|
26.05.2014, 16:45
|
|
Shnit
Зарегистрирован: 2009-08-05
Сообщений: 3
|
Я наверно не совсем правильно сформулировал изначальный вопрос.. мне надо было сделать так, чтобы когда я изменяю программно статус отсылалось или не отсылалось письмо в зависимости от настроек шаблонов писем в магазине.
через систему событий тоже дело хорошее, но там получалось надо писать свой велосипед отправки писем и проверки статуса заказа, что не имело смысл, т.к. нашел такую функцию в самой системе)
|