Оптовая цена в 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, то цена остается прежней. Как это можно исправить? Комментарии: 12
Ты после уменьшения тоже страницу перезагружаешь и ничего не меняется?
Не меняется
По коду лично я ошибок не вижу, поэтому на твоём месте стал бы логгировать процессы в плагине.
Как это сделать не подскажете?
$modx->log(1, print_r($tmp,1));
Я так понимаю здесь не перезаписывается почему-то обратно
$cart->set($tmp); //Записываем данные в корзину
break;
Потому что если подобным сниппетом просто на экран выводить, то цена обновляется и в ту и в другую сторону.
Если удаляю товар из корзины при помощи кнопки
<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;
});
Посмотри на вкладке Сеть в консоли браузера, отправляется или нет.
Отправляется
URL Запроса:
assets/components/minishop2/action.php
Метод Запроса:
POST
Код Статуса:
200
URL Запроса:
assets/components/minishop2/action.php
Метод Запроса:
POST
Код Статуса:
200
Тогда надо переходить к первому совету: логировать плагин.
Вроде разобрался, данные события case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': не срабатывают при уменьшении количества товара в корзине, только на удаление. Поставил плагин на событие OnLoadWebDocument и цена обновляется в ту и в другую сторону. Еще бы научиться это делать без перезагрузки страницы.
'msOnChangeInCart' должно срабатывать на любое изменение в корзине.
Без перезагрузки страницы сложно, тебе надо корзину перерисовывать и возвращать готовый html или всё корзину объектом. Это можно сделать только если ты расширишь обработчик корзины или напишешь свой коннектор на который будешь слать отдельный запрос на получение корзины после изменений в ней.
Без перезагрузки страницы сложно, тебе надо корзину перерисовывать и возвращать готовый html или всё корзину объектом. Это можно сделать только если ты расширишь обработчик корзины или напишешь свой коннектор на который будешь слать отдельный запрос на получение корзины после изменений в ней.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.