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

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

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

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

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

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

Артур
01 декабря 2020, 10:22
0
Первое что приходит в голову это скопировать поле и поменять ms2_frontend_count_unit на ms2_frontend_weight_unit. А вам для чего это нужно?
    Harry
    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;
      }
        Harry
        01 декабря 2020, 13:34
        0
        в том то и дело, что мне не нужно менять цену. Давайте объясню: у нас есть список товаров (наименование и цена). Менеджер создает заявку на закуп и получает деньги на закуп, но иногда он может купить товар дороже, а иногда дешевле. Вот чтобы видеть разницу нужна графа Цена фактическая, а не менять цену товара, так как из-за этого нельзя будет отследить разницу.
          Артур
          01 декабря 2020, 13:37
          0
          Плагин который я предложил меняет цену ТОЛЬКО в корзине, т.е. в самом ресурсе цена не меняется, другая цена будет в этом конкретном заказе. Соответственно можно будет сравнить цену в заказе и цену у ресурса.
            Harry
            01 декабря 2020, 13:39
            0
            ааа, вот оно как. Круто, спасибо большое! Теперь надо попробовать кастомизировать админку minishop2, чтобы там отображались только нужные поля и заодно считалась разница. Спасибо еще раз, буду пробовать
              Harry
              02 декабря 2020, 09:56
              0
              не сработало к сожалению, отправляется также цена та, что есть.
                Артур
                02 декабря 2020, 10:09
                0
                Странно. На фронте поле для ввода цены добавил? name какой? В плагине $_post смотрел? Вообще дебаг какой-то проводил или просто код скопировал и он не сработал?
                  Harry
                  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?
                      Harry
                      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;
                        }
                        Harry
                        02 декабря 2020, 10:47
                        0
                        а закрывающую скобку сразу или после всех операций в конце после фигурной?
    Артур
    02 декабря 2020, 10:50
    0
    С телефона неудобно писать код, так что за опечатки сорри
      Harry
      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?
          Harry
          02 декабря 2020, 11:18
          0
          да, на вкладке элементы, галочку давно поставил
            Harry
            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}
              это ваши переменные?
                Harry
                02 декабря 2020, 12:35
                0
                да, верно. при этом выводится 0, если $total.cart_cost меньше $total.cart_weight, и выводится 1 если наоборот
                  Артур
                  02 декабря 2020, 12:42
                  0
                  Откуда в массиве $total взялись cart_cost и cart_weight?
                    Harry
                    02 декабря 2020, 12:44
                    0
                    это же общий вес и общая стоимость товаров в корзине. Если выводить просто по отдельности, то нормальные числа, но как только делаю математические операции, то они оба будто определяются как 1.
                      Harry
                      02 декабря 2020, 12:53
                      0
                      вроде понял. обе переменные пусть и принимают числовые значения, но являются строками. нужно просто конвертировать строки в числа перед вычислением
                        Артур
                        02 декабря 2020, 12:56
                        0
                        $total.count вот общее количество, а вот $total.weight общий вес. Откуда $total.cart_cost и $total.cart_weight?
                          Harry
                          02 декабря 2020, 13:03
                          0
                          эти переменные были в шаблоне tpl.msGetOrder — не я их создавал. Да и в любом случае, даже используя просто $total.weight и $total.cost я получаю тоже самое. Не знаю как преобразовать строку в число
                            Артур
                            02 декабря 2020, 13:19
                            0
                            {($total.cost | replace: ' ' : '') - $total.weight}
                            Harry
                            02 декабря 2020, 13:40
                            0
                            не работает, выводит странное число
                            Артур
                            02 декабря 2020, 14:32
                            0
                            {($total.cost | replace: ' ' : '') - ($total.weight | number: '0' : '.' : '')}
                            Harry
                            02 декабря 2020, 14:37
                            0
                            спасибо большое, решилось само по себе после очистки кэша…
                            Артур
                            02 декабря 2020, 14:46
                            0
                            Прекрасно
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        30