[miniShop2 4.0.0-beta] - Разбор нововведений. Гибкая настройка статусов

В серии коротких заметок расскажу и детально покажу что нового мы сделали для Вас в новой версии miniShop2 Для MODX2

На очереди обновление связанное со статусами заказов.


Исходная проблема.

Если вы разработчик и достаточно плотно работали с miniShop2 — то должно быть замечали следующее:

После первоначального создания заказа — заказу принудительно присваивается статус Новый заказ — причем ID статуса вшит намертво в код.

$this->ms2->changeOrderStatus($msOrder->get('id'), 1);
А если я создал новый статус, и хочу чтобы он был стартовым? А если я удалил статус с ID = 1

Ровно та же ситуация с оплаченными заказами.
Все платежные системы после успешной оплаты выставляют ID = 2.

В miniShop2 3.0.0 появился новый статус Черновик. В некоторых случаях заказ создается с этим статусом — и тоже был вшитый в код намертво ID статуса.

В админке есть небольшая статистика по заказам. Данные выбираются по выполненным заказам. Как вы думаете был указан перечень статусов заказов, которые считаются выполненными? Конечно — тоже намертво вшитые ID



В общем подобная логика прослеживается везде по коду

Решение

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

  • ms2_status_draft — ID статуса заказа Черновик, по умолчанию 5
  • ms2_status_new — ID первоначального статуса заказа, по умолчанию 1
  • ms2_status_paid — ID статуса оплаченного заказа, по умолчанию 2
  • ms2_status_for_stat -ID статусов для статистики (через запятую), по умолчанию 2,3
Код внутри классов тоже изменился с учетом этих настроек
В методе Order.submit()
Было
$this->ms2->changeOrderStatus($msOrder->get('id'), 1);

Стало
$status_new = $this->modx->getOption('ms2_status_new', null, 1);
$this->ms2->changeOrderStatus($msOrder->get('id'), $status_new);


Рекомендуемое изменение для платежных модулей минишопа
Было
$this->ms2->changeOrderStatus($order->get('id'), 2);

Рекомендуем
$status_paid = $this->modx->getOption('ms2_status_paid', null, 2);
$this->ms2->changeOrderStatus($order->get('id'), $status_paid );
Ну и так далее. Общая логика — ID статуса нужно забирать из системной настройки.
Николай Савин
20 сентября 2022, 15:54
modx.pro
537
+12
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0