Заменить цены товаров в корзине на следующий день
Приветствую! Помогите разобраться с такой проблемой — воюю уже который день.
Дело в том, что в магазине установлен mionishop2 и Discontrol. Есть скидки например по часам, допустим только вечером. Но если пользователь положил товар в корзину вечером по скидке, он может купить его утром по той же цене, что была по скидке. Хотелось бы проверять, есть ли текущая скидка на товар и заменять цену на прежнюю. Я создал кастомный класс msOrderHandler, туда прописал вызов сниппета dcProductDiscount где сверяю, есть ли к товарам в корзине какие-нибудь скидки, но как корректно вернуть цены в корзину я так и не понял. Пытался делать так (добавил это в кастомный класс заказа в метод getCost):
Что я делаю не так?
Дело в том, что в магазине установлен mionishop2 и Discontrol. Есть скидки например по часам, допустим только вечером. Но если пользователь положил товар в корзину вечером по скидке, он может купить его утром по той же цене, что была по скидке. Хотелось бы проверять, есть ли текущая скидка на товар и заменять цену на прежнюю. Я создал кастомный класс msOrderHandler, туда прописал вызов сниппета dcProductDiscount где сверяю, есть ли к товарам в корзине какие-нибудь скидки, но как корректно вернуть цены в корзину я так и не понял. Пытался делать так (добавил это в кастомный класс заказа в метод getCost):
$ms2cart = $this->ms2->cart->get();
foreach ($ms2cart as $key => $value) {
$discount = 0;
$product = $this->modx->getObject('modResource', $value['id']);
$msData = $this->modx->getObject('msProductData', $value['id']);
$format = $pdo->runSnippet('dcProductDiscount', [
'product' => $value['id'],
'tplRow' => '@INLINE {$format.discount}',
]);
//щепотка быдлокода
if ($format != '<div>No discounts</div>') {
$discount += $format;
}
if ($discount == 0) {
$this->modx->log(1, 'Скидка кончилась' . $value['id']);
if (($msData->get('old_price') > 0) && ($msData->get('price') > $msData->get('old_price'))) {
$ms2cart[$key]['price'] = $msData->get('old_price');
} else {
$ms2cart[$key]['price'] = $msData->get('price');
}
} else {
$this->modx->log(1, 'скидка ' . $value['id']. ' '.$discount);
}
}
//$this->modx->log(1, print_r($ms2cart, 1));
$this->ms2->cart->set($ms2cart);
Но это как-то не очень срабатывает — во-первых срабатывает только при второй перезагрузке корзины, а во-вторых, почему-то только для первого товара в корзине( Что я делаю не так?
Поблагодарить автора
Отправить деньги
Комментарии: 1
Делай через плагин (OnHandleRequest), в нем бери корзину, проходи по товарам в корзине… и меняй цену в корзине.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.