Оптовая цена при заказе на сумму более 10000

Здравствуйте, друзья!
Такой вопрос. Допустим, я сделаю old_price — оптовой ценой. Мне нужно, чтобы было так:
если общий заказ превышает 10000, корзина пересчитывается и вместо вместо обычной цены идет оптовая.
Это я должна как-то написать плагин на событие msOnBeforeAddToOrder? Дайте, пожалуйста, направление мысли!
Wmaster
02 мая 2017, 13:59
modx.pro
2
2 032
0

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

Василий Столейков
02 мая 2017, 22:22
0
modx.pro/help/11810/ — посмотри внимательно, в комментариях направление есть. В самой статье же и ссылки на похожие решения.
У меня всё получилось — просто возьми мой вариант из комментариев и адаптируй под твои нужды.
    Wmaster
    03 мая 2017, 14:57
    0
    Вот такой идиотский вопрос — а скрипт для фронтенда куда вписывать?
      Василий Столейков
      03 мая 2017, 15:00
      0
      а скрипт для фронтенда куда вписывать?
      Прямо на фронтенд и вписывать.
      В шаблоне если подключён файл .js или просто вставить код перед закрывающим тегом . Это уже зависит от того как организован проект.
      Wmaster
      04 мая 2017, 10:07
      0
      Поскольку у меня цены формируются так:
      розница 150% от закупочной
      опт 130% от закупочной
      я воспользовалась вашим плагином, но он почему-то не работает( Или, может, я не вывела эти оптовые цены на фронт. Они в идеале где должны отображаться? Вместо стоимости корзины?

      Вот плагин:
      <?php
      switch ($modx->event->name) {
          case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': 
              $total_count = $cart->status()['total_count'];
              $total_cost = $cart->status()['total_cost'];
              
              $procent = 130;
              
              $tmp = $cart->get();
              
              if ($total_cost > 10000) {
                  foreach ($tmp as $key1 => $value) {
                      if ($product = $modx->getObject('msProduct', $value['id'])) {
      
                          $price = $product->get('price');
                          $price = $procent * $price / 150;
                         
                      	$tmp[$key1]['price'] = $price;
                          $modx->log(modX::LOG_LEVEL_ERROR, "cart: ".print_r($price,1) );
                      	
                      	
                      }
                  }
              }
              else {
                  foreach ($tmp as $key1 => $value) {
                      if ($product = $modx->getObject('msProduct', $value['id'])) {
                      	$tmp[$key1]['price'] = $product->get('price');
                      }
                  }
              }
              $cart->set($tmp);
          break;
      }
      Вот скрипт:
      <script>
          miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
              var total_cost = e.data.total_cost;
              if(total_cost > 10000) {      
                  console.log('opt');
                  $('#msCart .price .procent').text('Опт');
              } else {
                  $('#msCart .price .procent').text('');
              }
          });
          miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
              var total_cost = e.data.total_cost;
              if(total_cost > 10000) {      
                  console.log('opt');
                  $('#msCart .price .procent').text('Опт');
              } else {
                  $('#msCart .price .procent').text('');
              }
          });
      </script>
      Вот ошибка: Uncaught TypeError: miniShop2.Callbacks.add is not a function at korzina.html:684
      Собственно, скрипт ему не нравится: 684 строчка:
      miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
        Николай Каленников
        04 мая 2017, 11:11
        0
        Скорее всего, вы запускаете скрипт раньше, чем подключается скрипт minishop2. Поэтому он функцию не «узнаёт»
          Wmaster
          04 мая 2017, 17:14
          0
          Да. Я тоже об этом подумала. И загнала скрипт в самый низ. Ошибки больше нет, но и ничего не работает( КАк мне вообще проверить, что там происходит, работает ли этот плагин?
            Wmaster
            04 мая 2017, 17:27
            0
            Извините! Подумать-подумала, но в самый низ вставить никак не могу. Еще понять надо в какой файл. Разберусь и отпишусь, что получается!
              Wmaster
              04 мая 2017, 20:27
              0
              1. Так и не могу понять — как грамотно вписать мой скрипт. Дефолтный скрипт минишопа подключается в самом конце страницы по-любому. Единственное что удалось — дописать мой скрипт прямо в default.js. Переименовать его в жизни и в настройках — это правильно?
              2. Считает идиотски) Если сразу закинуть 10 костюмов по 1300 — в корзине правильно указывает оптовую цену и оптовую стоимость.
              Но если сначала взять один костюм и увеличить кол-во товара уже в корзине — отдает цену розничную и стоимость розничную.
              Зато если потом к этой корзине, по стоимости превышающей 10 000, добавить еще какой-то товар — пересчитывает правильно.
              3. Очень тупой вопрос — зачем нужен и плагин, и js?
                Wmaster
                04 мая 2017, 22:10
                0
                Вопрос 2 отпал — забыла указать событие msOnChangeInCart, сейчас пересчитывает все при любых изменениях корзины. Но сам процент считался как-то дебильно… с копейками… Я решила использовать поле weight — не понимаю теперь, как его переименовать в админке, чтобы прилично выглядело.
                  Wmaster
                  05 мая 2017, 01:47
                  0
                  Жаль, что здесь нельзя удалять свои комментарии. Я неплохо разобралась в теме за эти часы. Все сделала по уму. Для оптовой цены ввела опцию, пересчет работает прекрасно.
                  Хочу только на фронтенде в случае опта к сумме заказа приписать слово «опт» — в чанке tpl.msCart.outer вставила после «Ваша сумма заказа» — и вот никак не пишется слово это!
                  Я вписала в конец дефолтного js строчки:
                  miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
                          var total_cost = e.data.total_cost;
                          if(total_cost > 10000) {      
                              console.log('opt');
                              $('#msCart .opt').text('Опт');
                          } else {
                              $('#msCart .opt').text('');
                          }
                      });
                      miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
                          var total_cost = e.data.total_cost;
                          if(total_cost > 10000) {      
                              console.log('opt');
                              $('#msCart .opt').text('Опт');
                          } else {
                              $('#msCart .opt').text('');
                          }
                      });
                  но консоль все равно выдает:
                  Uncaught TypeError: miniShop2.Callbacks.add is not a function
                  Частично работает скрипт, потому что отображается зачеркнутая розничная цена. А вот слово «опт» никак не могу добить!
                    Василий Столейков
                    05 мая 2017, 13:42
                    0
                    Где находится вышеприведённый скрипт? В отдельном файле или прямо в конце шаблона?
                      Василий Столейков
                      05 мая 2017, 13:45
                      0
                      Если на сайте используется Fenom, то можно в шаблоне зарегистрировать чанк с этим оптовым js-кодом.
                      Выглядеть это будет примерно так:
                      {$_modx->regClientHTMLBlock($_modx->getChunk('scripts.opt'))}
                      В таком случае скрипт должен подключаться при рендеринге страницы после минишоповских скриптов.
                    Wmaster
                    05 мая 2017, 17:02
                    0
                    Прям в конце default.js. В самом конце дописала. А в шаблоне корзины tpl.msCart.outer написала:
                    СУММА ВАШЕГО ЗАКАЗА<span class="opt"></span>:
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      13