Как получить список товаров и поля заказа, при оформлении заказа?

Нужно проверить товары когда нажимается кнопка оформить заказа, и получить из заказа город, пытался так msOnBeforeCreateOrder но там в $msOrder $order не нашёл товаров.

Как получить товары и 1 поле заказа при оформлении заказа?
Vladimir
27 января 2022, 08:45
modx.pro
1 442
0

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

Vladimir
27 января 2022, 09:01
0
Можно ли вообще получить товары в плагине, в любом плагине. без каких либо событий
    Евгений Webinmd
    27 января 2022, 13:39
    1
    +1
    Поля разные;

    $orderData = [
        'order'         => $msOrder->toArray(),
        'delivery'      => $msOrder->Delivery->toArray(),
        'payment'       => $msOrder->Payment->toArray(),
        'address'       => $msOrder->Address->toArray(),
        'user'          => $msOrder->User->toArray(),
        'user_profile'  => $msOrder->UserProfile->toArray(),
    ];
    
    
    $modx->log(1,'Order data '.print_r($orderData, 1));

    Товары:

    if($orderProducts = $msOrder->getMany('Products') ) {              
    
        foreach ($orderProducts as $orderProduct) {
            $orderProduct->get('count'); 
            // ... поля товара в заказе 
            //$fields = $modx->getObject('msProductData', array('id' => $orderProduct->get('product_id'))        
        }
    
    }
      Vladimir
      30 января 2022, 08:46
      0
      А как получить кастомное поле в форме заказа? при выводе $msOrder как оно есть через вар дамп, там я вижу своё поле но как его получить, хз, через var_dump() мне выдаёт 1,5 мегабайта текста, в котором просто так же есть и код моего плагина. А при выводе var_dump($msOrder->toArray()) я уже не вижу своего кастомного поля.
        Vladimir
        30 января 2022, 08:55
        0
        Всё нашёл, Спасибо, а можете подсказать, как мне самому доходить до такого вот как с заказом, в документации не написано что это нужно брать вот так, есть такое
          Николай Савин
          30 января 2022, 09:42
          +1
          Изучать исходный код компонентов. Читать схожие вопросы и инструкции здесь на форуме.
        Vladimir
        30 января 2022, 09:10
        0
        Как можно удалить товар из заказа? и вернуть ошибку, что допустим нет такого товара?
          Николай Савин
          30 января 2022, 09:45
          +1
          Куда вернуть ошибку? Клиенту вывести на экран в момент добавления товара в корзину? Тогда товар нужно удалять не из заказа, а из корзины.
          Или же удалить из уже созданного заказа? Тогда совсем не понятно куда вернуть ошибку.
          Это разные сущности, и реализация разная будет.
            Vladimir
            30 января 2022, 10:05
            0
            При создания заказа, когда создаётся заказ, проверяется есть ли этот товар в городе который человек выбрал(проверка готова), если нет, то удалить из заказа, и вывести ошибку, есть ли встроенный функционал вывода ошибок при создании заказа? или придётся делать самому?
              Николай Савин
              30 января 2022, 10:14
              +2
              У вас некорректная логика. Такую ошибку нужно выводить при попытке положить товар в корзину и не давать это сделать изначально.
              Здесь этот вопрос обсуждался неоднократно. Воспользуйтесь поиском.
              Вот например modx.pro/help/9381

              Функционал ошибок есть. Основан на плагинах. На каждое действие (почти) есть свое событие.
              Список событий найдете в документации. Создаете плагин на нужное событие. Выполняете проверку — возвращаете нужный ответ
                Vladimir
                30 января 2022, 10:16
                0
                Да некорректная но как бы начальству похер, по этому сказали проверять при оформлении заказа, потому что при попытки положить в корзину каждый раз нужно было бы выбирать город, то есть сделано максимально под покупателя, в одном месте за раз.
                  Николай Савин
                  30 января 2022, 10:43
                  +1
                  Ну в целом выполнение задачи не меняется. Подберите событие, которое срабатывает перед созданием заказа, напишите плагин, реагирующий на такое событие.
                  Vladimir
                  30 января 2022, 10:17
                  0
                  Подскажите пожалуйста как удалить товары из заказа
                    Николай Савин
                    30 января 2022, 10:45
                    +1
                    Товары находятся не в заказе, а в корзине.
                    Корзина это массив данных. Получить его можно через метод
                    $ms2->cart->get();
                    Далее просто удалите ненужный элемент массива и обновите корзину через
                    $ms->cart->set();
                      Vladimir
                      30 января 2022, 10:46
                      0
                      Спасибо большое
                        Николай Савин
                        30 января 2022, 10:49
                        +1
                        Я на всякий случай уточню. Вообще, то есть метод
                        $ms->cart->remove($key);
                        Но в вашем конкретном случае мне показалось, что больше подойдет приведенный выше код.
                        Потому что все равно корзину перебирать и проверять наличие товара.
                          Vladimir
                          30 января 2022, 10:52
                          0
                          Да тот метод выше подойдёт, но это потом, в текущем варианте без удаления будет лучше, так как человек может по ошибке выбрал город, уведомление выводится, он увидит, изменит город и всё в порядке не нужно заново добавлять товар и тд
                      Vladimir
                      30 января 2022, 10:40
                      0
                      Спасибо за ссылку, там нашёл код вывода, $modx->event->output('Вы пытаетесь положитель больше товаров чем есть в наличии'); а так же это отменяет создание заказа, и выводит то что нужно, спасибо большое
                        Николай Савин
                        30 января 2022, 10:45
                        +1
                        Пожалуйста. Пользоваться поиском довольно полезно.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              18