Оптовая цена в minishop2 в зависимости от общего количества товара в корзине

Добрый вечер. Подскажите пожалуйста, делаю у товара оптовую цену, которая будет применятся, после того как количество товара в корзине будет больше 10. Пока для этого использовал свойство old_price. Вот такой плагин:

<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
    $tmp = $cart->get();
    foreach ($tmp as $key => $value) {
    	$count += $value['count'];
    }
    foreach ($tmp as $key => $value) {
        if ($product = $modx->getObject('msProduct', $value['id'])) {
            if ($count > 10 && $product->get('old_price') !=0) {
                $tmp[$key]['price'] = $product->get('old_price');
            }
            else {
                $realPrice = $product->get('price');
                $tmp[$key]['price'] = $realPrice; // Устанавливаем новую цену для товара в корзине
            }
        }
    }
    $cart->set($tmp); //Записываем данные в корзину
    break;
}
При достижении в корзине количества товара больше 10, перезагружаешь страницу, цены меняются, а вот когда количество товара уменьшаешь, делаешь меньше 10, то цена остается прежней. Как это можно исправить?
Алексей
16 сентября 2023, 22:03
modx.pro
1
527
0

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

Артур Шевченко
16 сентября 2023, 22:33
0
Ты после уменьшения тоже страницу перезагружаешь и ничего не меняется?
    Алексей
    16 сентября 2023, 23:03
    0
    Не меняется
      Артур Шевченко
      16 сентября 2023, 23:22
      0
      По коду лично я ошибок не вижу, поэтому на твоём месте стал бы логгировать процессы в плагине.
        Алексей
        17 сентября 2023, 09:54
        0
        Как это сделать не подскажете?
        Алексей
        17 сентября 2023, 09:59
        0
        Я так понимаю здесь не перезаписывается почему-то обратно
        $cart->set($tmp); //Записываем данные в корзину
         break;
        Потому что если подобным сниппетом просто на экран выводить, то цена обновляется и в ту и в другую сторону.
    Алексей
    17 сентября 2023, 11:09
    0
    Если удаляю товар из корзины при помощи кнопки
    <button class="btn btn-default" type="submit" name="ms2_action" value="cart/remove"></button>
    то обновление цены происходит, но если использую счетчик уменьшения кол-ва товара, то не работает. Видимо не срабатывает событие, хотя на увеличение срабатывает. Кнопки подключены так:
    $('.minus').click(function () {
            var $input = $(this).parent().find('input');
            var count = parseInt($input.val()) - 1;
            count = count < 1 ? 1 : count;
            $input.val(count);
            $input.change();
            return false;
        });
        $('.plus').click(function () {
            var $input = $(this).parent().find('input');
            $input.val(parseInt($input.val()) + 1);
            $input.change();
            return false;
        });
      Артур Шевченко
      17 сентября 2023, 12:33
      0
      Посмотри на вкладке Сеть в консоли браузера, отправляется или нет.
        Алексей
        17 сентября 2023, 13:40
        0
        Отправляется
        URL Запроса:
        assets/components/minishop2/action.php
        Метод Запроса:
        POST
        Код Статуса:
        200
          Артур Шевченко
          17 сентября 2023, 16:12
          0
          Тогда надо переходить к первому совету: логировать плагин.
            Алексей
            18 сентября 2023, 10:45
            0
            Вроде разобрался, данные события case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': не срабатывают при уменьшении количества товара в корзине, только на удаление. Поставил плагин на событие OnLoadWebDocument и цена обновляется в ту и в другую сторону. Еще бы научиться это делать без перезагрузки страницы.
              Артур Шевченко
              18 сентября 2023, 11:36
              0
              'msOnChangeInCart' должно срабатывать на любое изменение в корзине.

              Без перезагрузки страницы сложно, тебе надо корзину перерисовывать и возвращать готовый html или всё корзину объектом. Это можно сделать только если ты расширишь обработчик корзины или напишешь свой коннектор на который будешь слать отдельный запрос на получение корзины после изменений в ней.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      12