minishop2 корзина как сделать input в графе "вес" как и у "количество"?

Здравствуйте!

Подскажите, пожалуйста, как сделать input в столбце Вес, в точности как и у Количество.

Добавить то я добавил, но почему-то при сохранении заказа в админке вес также указывается 0.

Что нужно сделать? Заранее благодарю за помощь
Lori
01 декабря 2020, 07:14
modx.pro
645
0

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

Артур Шевченко
01 декабря 2020, 10:22
0
Первое что приходит в голову это скопировать поле и поменять ms2_frontend_count_unit на ms2_frontend_weight_unit. А вам для чего это нужно?
    Lori
    01 декабря 2020, 11:59
    0
    не работает. долго объяснять, но попытаюсь попроще: мне нужно сделать сайт для менеджера по закупам. Он заходит на сайт, добавляет товары из каталога в корзину и формирует заявку. Не всегда получается найти товар по цене с каталога, чаще дороже, поэтому после закупа он должен внести корректировки в заявку — дописать фактическую цену. Например перчатки в каталоге по цене 30р и ему надо купить 10 пар, но он купил 10 по цене 40р.
    Почему именно вес решил, потому что он автоматом умножает на количество и мне останется лишь переименовать столбец в админке и вывод в корзине.
      Артур Шевченко
      01 декабря 2020, 13:22
      0
      Это так не работает, от того что вы измените вес на фронте, заказ корректно не пересчитается. Когда вы меняете количество отправляется ajax запрос на сервер в котором передается только количество, при этом даже если вы скопируете поле и дадите ему другое имя на сервере обработается только переданное количество, поэтому менять вес нет никакого смысла. Из вашего же объяснения следует, что менять надо цену, для этого нужен плагин на событие msOnChangeInCart, который будет из массива $_POST брать новую цену и менять старую. Вот тут docs.modx.pro/komponentyi/minishop2/razrabotka/sluzhbyi/korzina#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F написано какие переменные доступны в плагине. Чтобы посмотреть как выглядит корзина используйте вот такую конструкцию $tmp = $cart->get(); Распечатайте в консоль и посмотрите. Скорее всего должно получится как-то так:
      switch ($modx->event->name) {
              case 'msOnChangeInCart':
                  $tmp = $cart->get();
                  $tmp[$key]['price'] = $_POST['price'];
                  $cart->set($tmp);
               break;
      }
        Lori
        01 декабря 2020, 13:34
        0
        в том то и дело, что мне не нужно менять цену. Давайте объясню: у нас есть список товаров (наименование и цена). Менеджер создает заявку на закуп и получает деньги на закуп, но иногда он может купить товар дороже, а иногда дешевле. Вот чтобы видеть разницу нужна графа Цена фактическая, а не менять цену товара, так как из-за этого нельзя будет отследить разницу.
          Артур Шевченко
          01 декабря 2020, 13:37
          0
          Плагин который я предложил меняет цену ТОЛЬКО в корзине, т.е. в самом ресурсе цена не меняется, другая цена будет в этом конкретном заказе. Соответственно можно будет сравнить цену в заказе и цену у ресурса.
            Lori
            01 декабря 2020, 13:39
            0
            ааа, вот оно как. Круто, спасибо большое! Теперь надо попробовать кастомизировать админку minishop2, чтобы там отображались только нужные поля и заодно считалась разница. Спасибо еще раз, буду пробовать
              Lori
              02 декабря 2020, 09:56
              0
              не сработало к сожалению, отправляется также цена та, что есть.
                Артур Шевченко
                02 декабря 2020, 10:09
                0
                Странно. На фронте поле для ввода цены добавил? name какой? В плагине $_post смотрел? Вообще дебаг какой-то проводил или просто код скопировал и он не сработал?
                  Lori
                  02 декабря 2020, 10:18
                  0
                  Да добавил, name сделал price2. В коде соответственно сделал так
                  $tmp[$key]['price'] = $_POST['price2'];
                  Смотрел только результат POST запроса в Network
                    Артур Шевченко
                    02 декабря 2020, 10:23
                    0
                    В плагине напиши $modx->log(1, print_r($_POST,1) только журнал ошибок почисть сначала, потом посмотр что приходит. Так же $tmp распечатай, посмотри что там. Ну да, ты же в настройках плагина галочку поставил напротив события msOnChangeInCart?
                      Lori
                      02 декабря 2020, 10:42
                      0
                      Событие поставил.
                      Пардон, а в каком месте плагина именно вставить, просто я в PHP нулина
                        Артур Шевченко
                        02 декабря 2020, 10:45
                        0
                        switch ($modx->event->name) {
                                case 'msOnChangeInCart':
                                    $modx->log(1, print_r($_POST,1));
                                    $tmp = $cart->get();
                                    $modx->log(1, print_r($tmp,1)); 
                                    $tmp[$key]['price'] = $_POST['price'];
                                    $cart->set($tmp);
                                 break;
                        }
                        Lori
                        02 декабря 2020, 10:47
                        0
                        а закрывающую скобку сразу или после всех операций в конце после фигурной?
    Артур Шевченко
    02 декабря 2020, 10:50
    0
    С телефона неудобно писать код, так что за опечатки сорри
      Lori
      02 декабря 2020, 11:03
      0
      ладно друг, спасибо большое за уделенное время, но видимо я все таки не справлюсь с этой задачей. Сделал все, в логе только «Невозможно запустить функцию mail», пробовал выводить и на фронте. Заказ в админке появляется но со старыми ценами. Плагина код:
      <?php
      switch ($modx->event->name) {
              case 'msOnChangeInCart':
                  $modx->log(1, print_r($_POST,1,'HTML'));
                  $tmp = $cart->get();
                  $modx->log(1, print_r($tmp,1,'HTML')); 
                  $tmp[$key]['price'] = $_POST['price2'];
                  $cart->set($tmp);
               break;
      }
      Форма на сайте
      <form method="post" class="ms2_form" role="form">
                                      <input type="hidden" name="key" value="{$product.key}"/>
                                      <div class="form-group">
                                          <div class="input-group input-group-sm">
                                              <input type="number" name="price2" value="" class="form-control"/>
                                              <div class="input-group-append">
                                                  <span class="input-group-text">{'ms2_frontend_currency' | lexicon}</span>
                                              </div>
                                          </div>
                                          <button class="btn btn-sm" type="submit" name="ms2_action" value="cart/change">↻</button>
                                      </div>
                                  </form>
        Артур Шевченко
        02 декабря 2020, 11:15
        0
        Я только что всё проверил всё работает. Ты плагин создавал в админке на вкладке элементы? Вот тут галочку поставил yadi.sk/i/xsqoAy8g1mG2LA?
          Lori
          02 декабря 2020, 11:18
          0
          да, на вкладке элементы, галочку давно поставил
            Lori
            02 декабря 2020, 12:03
            0
            извини за назойливость. я все таки смог изменить значение weight и теперь переименовал эту графу. теперь мне нужно вывести разницу total_price и total.weight, но когда я пишу в чанке так:
            {$total.cart_cost - $total.cart_weight}
            то у меня выводится либо 0 либо 1. Подскажи как сделать такую простую вещь?
              Артур Шевченко
              02 декабря 2020, 12:07
              0
              {$total.cart_cost - $total.cart_weight}
              это ваши переменные?
                Lori
                02 декабря 2020, 12:35
                0
                да, верно. при этом выводится 0, если $total.cart_cost меньше $total.cart_weight, и выводится 1 если наоборот
                  Артур Шевченко
                  02 декабря 2020, 12:42
                  0
                  Откуда в массиве $total взялись cart_cost и cart_weight?
                    Lori
                    02 декабря 2020, 12:44
                    0
                    это же общий вес и общая стоимость товаров в корзине. Если выводить просто по отдельности, то нормальные числа, но как только делаю математические операции, то они оба будто определяются как 1.
                      Lori
                      02 декабря 2020, 12:53
                      0
                      вроде понял. обе переменные пусть и принимают числовые значения, но являются строками. нужно просто конвертировать строки в числа перед вычислением
                        Артур Шевченко
                        02 декабря 2020, 12:56
                        0
                        $total.count вот общее количество, а вот $total.weight общий вес. Откуда $total.cart_cost и $total.cart_weight?
                          Lori
                          02 декабря 2020, 13:03
                          0
                          эти переменные были в шаблоне tpl.msGetOrder — не я их создавал. Да и в любом случае, даже используя просто $total.weight и $total.cost я получаю тоже самое. Не знаю как преобразовать строку в число
                            Артур Шевченко
                            02 декабря 2020, 13:19
                            0
                            {($total.cost | replace: ' ' : '') - $total.weight}
                            Lori
                            02 декабря 2020, 13:40
                            0
                            не работает, выводит странное число
                            Артур Шевченко
                            02 декабря 2020, 14:32
                            0
                            {($total.cost | replace: ' ' : '') - ($total.weight | number: '0' : '.' : '')}
                            Lori
                            02 декабря 2020, 14:37
                            0
                            спасибо большое, решилось само по себе после очистки кэша…
                            Артур Шевченко
                            02 декабря 2020, 14:46
                            0
                            Прекрасно
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        30