Изменение цены в корзине при переоценке
Привет.
Иногда возникает такая ситуация, когда пишите интернет-магазин на MODX и miniShop2 и при этом вы импортируете товары или переоцениваете их с какого-нибудь внешнего сервиса (Например 1С). Проблема которая возникает абсолютно всегда в таких случаях, что цены на товары меняются достаточно часто. В miniShop2 нет (пока нет) события, который бы позволял хендлить события перехода в коризну. Однако, мы можем сделать это на уровне MODX, его событий и API
Создаем плагин cartCheck и вешаем его на событие OnWebPagePrerender. Это событие уже спарсило ресус и его данные, но еще не вывело на страницу — все что нам нужно. В коде, делаем проверку на шаблон страницы. Обычно, корзина имеет свой выделенный шаблон. Далее нам предстоит инициализировать минишоп, получить корзину, модифицировать ее как угодно и назначить обратно. Так же мы сделаем проверку на то, опубликован или удален ресурс и не дадим его купить. На этом, собственно все. Ниже привожу код плагина
Иногда возникает такая ситуация, когда пишите интернет-магазин на MODX и miniShop2 и при этом вы импортируете товары или переоцениваете их с какого-нибудь внешнего сервиса (Например 1С). Проблема которая возникает абсолютно всегда в таких случаях, что цены на товары меняются достаточно часто. В miniShop2 нет (пока нет) события, который бы позволял хендлить события перехода в коризну. Однако, мы можем сделать это на уровне MODX, его событий и API
Создаем плагин cartCheck и вешаем его на событие OnWebPagePrerender. Это событие уже спарсило ресус и его данные, но еще не вывело на страницу — все что нам нужно. В коде, делаем проверку на шаблон страницы. Обычно, корзина имеет свой выделенный шаблон. Далее нам предстоит инициализировать минишоп, получить корзину, модифицировать ее как угодно и назначить обратно. Так же мы сделаем проверку на то, опубликован или удален ресурс и не дадим его купить. На этом, собственно все. Ниже привожу код плагина
<?php
if ($modx->event->name = 'OnWebPagePrerender'){
if ($modx->resource->id == 5) {
/** @var miniShop2 $miniShop2 */
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize();
$cart = $miniShop2->cart->get();
foreach ($cart as $key => &$element) {
/** @var msProduct $product */
if ($product = $modx->getObject('msProduct', $element['id'])) {
$element['price'] = $product->get('price');
if (!$product->get('published') || $product->get('deleted')){
unset($cart[$key]);
}
}
}
$miniShop2->cart->set($cart);
}
}
Поблагодарить автора
Отправить деньги
Комментарии: 6
Я думаю что дополнительно нужно оповещать каким-нибудь попАпом покупателя, что цена на товар который у него в корзине — изменилась.
Тогда уж нужно обновлять и $key позиции.
Если ты добавишь в корзину ещё один товар, который уже есть в корзине, то будет 2 позиции одного и того же товара
Если ты добавишь в корзину ещё один товар, который уже есть в корзине, то будет 2 позиции одного и того же товара
А как можно обновить ключ? Я только знаю как он генеруется
Удалить текущую позицию, добавить новую.
Также если цена пересчитывается через плагин, то таким образом будет неверная цена
Также если цена пересчитывается через плагин, то таким образом будет неверная цена
$element['price'] = $product->get('price');
Поправьте хотя бы заголовок: «в коризне».
Ну это все относительно.
Если бороться за сервис и лояльность, это функция не особо будет популярна.
Вот хранение в корзине товара, не более чем определенное время, вот тут больше поможет.
Если бороться за сервис и лояльность, это функция не особо будет популярна.
Вот хранение в корзине товара, не более чем определенное время, вот тут больше поможет.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.