Как в плагине поменять статус заказа minishop2?

Собственно вопрос в заголовке
Дмитрий Кондаков
17 мая 2016, 13:14
modx.pro
3
4 414
-1

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

Василий Наумкин
17 мая 2016, 16:16
+1
Собственно, ответ в документации.
    Дмитрий Кондаков
    17 мая 2016, 19:11
    0
    Честно, в документации не нашел. В модулях оплаты нашел следующее:
    $miniShop2 = $this->modx->getService('miniShop2');
    $miniShop2->changeOrderStatus($order->get('id'), 2);
    переделал под свои нужды в:
    $miniShop2 = $modx->getService('miniShop2');
    $miniShop2->changeOrderStatus($id, 3);
    Вставил код в плагин, в итоге статус не меняется, но письмо о смене статуса юзеру отправляется. Буду рад любой помощи)
      Володя
      17 мая 2016, 19:34
      1
      +2
      попробуйте так
      $miniShop2->changeOrderStatus($order->get('id'), 2);
      echo $modx->toJSON(array(
          'success' => true
          'message' => '',
          'data'    => array(),
      ));
      exit;
        Дмитрий Кондаков
        17 мая 2016, 21:12
        0
        Работает! Спасибо огромное!
          Konstantin B
          21 июня 2018, 22:25
          0
          Круто, реально работает, а может подскажешь какой-то другой подход, так как я меняю статус при создании заказа и скрипт по сути дальше не работает после изменения статуса, получается что пользователь остается на странице заказа, а заказ уже создан и статус у него изменился…
        Konstantin B
        21 июня 2018, 22:29
        0
        Читал доку но через массив $order изменить не удалось в событии «msOnCreateOrder»
        Пробовал таким образом:

        Этот код не работает.
        <?php
        switch ($modx->event->name) {
            case 'msOnCreateOrder':
                $order = $modx->getOption('msOrder', $scriptProperties);
                if (!is_object($order)) { return; }
                $order->set("status",5);
        	$order->save();
        	break;
        }
        Этот код работает, но пользователь остается на странице оформления заказа, при этом заказ создается, статус меняется. Естественно это из-аз exit(), но если его убрать, то статус уже не меняется, вот такие пироги.
        <?php
        switch ($modx->event->name) {
            case 'msOnCreateOrder':
                $order = $modx->getOption('msOrder', $scriptProperties);
                if (!is_object($order)) { return; }
                $order_id = $order->get('id');
                $modx->log(modX::LOG_LEVEL_ERROR, $msOrder->get('id'));
                
                $miniShop2 = $modx->getService('miniShop2');
                $miniShop2->changeOrderStatus($order_id, 5);
                
                echo $modx->toJSON(array(
                    'success' => true,
                    'message' => '',
                    'data'    => array(),
                ));
                exit(true);
        	break;
        }
          Konstantin B
          21 июня 2018, 23:13
          2
          0
          В общем и целом решение нашел, странно что в документации написано объект $order, меня честно говоря это ввело в заблуждение.

          Оставлю это тут, вдруг кому-то пригодится!

          Как оказалось достаточно такой конструкции:

          <?php
          switch ($modx->event->name) {
              case 'msOnCreateOrder':
                  
          	    if($newStatus == true)
          	    {
                      $msOrder->set("status","5");
                      $msOrder->save();
                  }
          	break;
          }
            Максим
            23 декабря 2018, 14:02
            0
            Делаю так же, но в админке все равно заказ создается со статусом «Новый» со всеми вытекающими последствиями, в виде отправляющихся писем. Мне же нужно принудительно установить статус, при котором письма не будут отправляться.
            Stepan
            18 апреля 2024, 17:01
            0
            попробуйте убрать
            exit(true);
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9