Хук на изменение статуса заказа.

В данной категории, пользователи задают вопросы относительно установки и эксплуатации MOGUTA.CMS
Ответить
Аватара пользователя
regdok
lvl 3
Сообщения: 20
Зарегистрирован: 05 июл 2021, 13:25

Хук на изменение статуса заказа.

Сообщение regdok » 12 авг 2021, 19:41

Есть менеджер. Есть горе хуки.
Нужно хукнуть функцию при ручном изменении статуса заказа (без редактирование самого заказа). Т.е. при открытии админки, в разделе активных заказов кликаем на заказ - открывается панель заказа - внизу "статус" -> меняем -> сохраняем.

Models_Order_updateOrder - хукает только если заказ редактируется (только если нажать "редактировать заказ")
Выполняется при изменение заказа из панели администратора или по API, при оплате заказа, при изменение способа оплаты пользователем
adminOrderSavePrepareData - не хукает даже если редактируется заказ. Не знаю почему... за шкафом.
Выполняется перед сохранением заказа в панели управления
Models_Order_setOrderStatus - О боги! Это оно! Но нет... банан. Хукает только если какой-то функционал делает принудительно setOrderStatus, но админка этого не делает.
Выполняется после изменения статуса заказа

Вывод: Меняй через админку статус сколько хочешь, но хука ты не получишь.
Я не знаю, можно в позе акробата жонглировать пытаясь отловить статус через Models_Order_sendStatusToEmail, правда манагер должен галку поставить "отправлять клиенту сообщение", иначе костыль для костыля ходить не будет.... такой изврат я уже принимаю как норму, после недели ковыряния API и хуков в великой Могуте... Но все же хочется думать, что я где-то не доглядел... а не как бомж на каждый чих писать костыли для костылей.
PS очень печалит, что за лицензию и шаблоны деньги уже не вернуть ((

Кто подскажет как же отловить смену статуса манагером, если он сам заказ при этом не редактирует?
Аватара пользователя
Mark
Web-мастер
Сообщения: 4626
Зарегистрирован: 28 авг 2012, 16:09

Re: Хук на изменение статуса заказа.

Сообщение Mark » 13 авг 2021, 16:28

Models_Order_updateOrder - хукает только если заказ редактируется (только если нажать "редактировать заказ")
Не только если нажать "редактировать заказ".

Данный метод updateOrder в модели Order отрабатывает при любом изменении заказа в админке, и вполне подойдет вам для перехвата события на смену статуса.
Аватара пользователя
regdok
lvl 3
Сообщения: 20
Зарегистрирован: 05 июл 2021, 13:25

Re: Хук на изменение статуса заказа.

Сообщение regdok » 13 авг 2021, 21:33

Нет. Только если обработчик (хук) добавить в любой модуль именно админки. А таких мест не очень много я нашел... большинство библиотек зашифрованы.
По крайней мере я одну библиотеку только нашел, в которую можно добавить хук.
Аватара пользователя
Mark
Web-мастер
Сообщения: 4626
Зарегистрирован: 28 авг 2012, 16:09

Re: Хук на изменение статуса заказа.

Сообщение Mark » 18 авг 2021, 17:41

О каких местах идет речь? Вы точно внимательно прочитали инструкцию по хукам и плагинам?
Обработчики для хуков необходимо писать в плагинах, либо на крайний случай в файле functions.php вашего шаблона. Других мест быть не может. Зашифрованные файлы вам даже близко не нужны для этого. :!:

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

Код: Выделить всё

new tempPlugin;
class tempPlugin {
  public function __construct() {
    mgAddAction('models_Order_updateOrder', array(__CLASS__, 'changeStatus'), 1);
  }

  static function changeStatus($args){
    print_r($args);
    return $args['result'];       
  }
} 
Аватара пользователя
regdok
lvl 3
Сообщения: 20
Зарегистрирован: 05 июл 2021, 13:25

Re: Хук на изменение статуса заказа.

Сообщение regdok » 19 авг 2021, 14:55

Mark писал(а):
18 авг 2021, 17:41
Зашифрованные файлы вам даже близко не нужны для этого. :!:
А я не утверждал, что они мне необходимы или я в них что-то собирался писать. Не нужно передергивать мои фразы.
За информацию благодарю.
Аватара пользователя
regdok
lvl 3
Сообщения: 20
Зарегистрирован: 05 июл 2021, 13:25

Re: Хук на изменение статуса заказа.

Сообщение regdok » 10 сен 2021, 16:53

Models_Order_setOrderStatus - Выполняется после изменения статуса заказа
Вернулся к данному вопросу... но "слона" то я и не заметил сразу ...
Mark писал(а):
18 авг 2021, 17:41
mgAddAction('models_Order_updateOrder', array(__CLASS__, 'changeStatus'), 1);
Models_Order_setOrderStatus не работает в админке... как в режиме редактирования заказа, так и при смене статуса без редактирования заказа.
Придется отлавливать новый статус через adminOrderSavePrepareData. :cry:
Ответить