Изменение цены в корзине при переоценке

Привет.

Иногда возникает такая ситуация, когда пишите интернет-магазин на 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);
    }
}
Павел Бигель
07 мая 2020, 15:56
modx.pro
9
417
+11
Поблагодарить автора Отправить деньги

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

iWatchYouFromAfar
07 мая 2020, 16:37
0
Я думаю что дополнительно нужно оповещать каким-нибудь попАпом покупателя, что цена на товар который у него в корзине — изменилась.
    Артем
    07 мая 2020, 17:27
    0
    Тогда уж нужно обновлять и $key позиции.
    Если ты добавишь в корзину ещё один товар, который уже есть в корзине, то будет 2 позиции одного и того же товара
      Павел Бигель
      07 мая 2020, 22:33
      0
      А как можно обновить ключ? Я только знаю как он генеруется
        Артем
        07 мая 2020, 22:47
        0
        Удалить текущую позицию, добавить новую.

        Также если цена пересчитывается через плагин, то таким образом будет неверная цена
        $element['price'] = $product->get('price');
      Роман
      08 мая 2020, 17:12
      0
      Поправьте хотя бы заголовок: «в коризне».
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5