К содержанию

Оптовая цена в 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 601
Реклама

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

Артур Шевченко
16 сентября 2023, 22:33
Ты после уменьшения тоже страницу перезагружаешь и ничего не меняется?
    Алексей
    Алексей Старожил
    16 сентября 2023, 23:03
    Не меняется
      Артур Шевченко
      16 сентября 2023, 23:22
      По коду лично я ошибок не вижу, поэтому на твоём месте стал бы логгировать процессы в плагине.
        Алексей
        Алексей Старожил
        17 сентября 2023, 09:54
        Как это сделать не подскажете?
        Алексей
        Алексей Старожил
        17 сентября 2023, 09:59
        Я так понимаю здесь не перезаписывается почему-то обратно
        $cart->set($tmp); //Записываем данные в корзину
         break;
        Потому что если подобным сниппетом просто на экран выводить, то цена обновляется и в ту и в другую сторону.
    Алексей
    Алексей Старожил
    17 сентября 2023, 11:09
    Если удаляю товар из корзины при помощи кнопки
    <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
      Посмотри на вкладке Сеть в консоли браузера, отправляется или нет.
        Алексей
        Алексей Старожил
        17 сентября 2023, 13:40
        Отправляется
        URL Запроса:
        assets/components/minishop2/action.php
        Метод Запроса:
        POST
        Код Статуса:
        200
          Артур Шевченко
          17 сентября 2023, 16:12
          Тогда надо переходить к первому совету: логировать плагин.
            Алексей
            Алексей Старожил
            18 сентября 2023, 10:45
            Вроде разобрался, данные события case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': не срабатывают при уменьшении количества товара в корзине, только на удаление. Поставил плагин на событие OnLoadWebDocument и цена обновляется в ту и в другую сторону. Еще бы научиться это делать без перезагрузки страницы.
              Артур Шевченко
              18 сентября 2023, 11:36
              'msOnChangeInCart' должно срабатывать на любое изменение в корзине.

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