msOnAddToCart срабатывает только при первом добавление товара, как исправить?

Нужно чтобы при добавлении товара если больше опред суммы, то снижал цену товара, и стоимость корзины.

Код который тестил
<?php
switch ($modx->event->name) {

    case 'msOnAddToCart':
        $res = $modx->getObject('modResource', 1);
        $defaultOptPrice = (int)$res->getTVValue('opt_price__default');
        
        $crt = $cart->get();
        $modx->log(modX::LOG_LEVEL_ERROR, '
 =:>' . print_r($crt));
        foreach($crt as $crtItem ){
            $currentGoods = $modx->getObject('modResource', (int)$crtItem['id']);
            $currentGoodsOptPrice = (int)$currentGoods->getTVValue('opt_price');
            if(((int)$crtItem['price'] * (int)$crtItem['count']) >= $defaultOptPrice){
                $crtItem['price'] = $currentGoodsOptPrice;
            }
            
        }
        $cart->set($crt);
        break;

        
        
}
Кстати код выше так же не меняет результат корзины.
Vladimir
09 июля 2021, 07:21
modx.pro
788
0

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

Vladimir
09 июля 2021, 07:22
0
Так же пытался с msOnBeforeAddToCart, но там корзина меняется но постоянно только 1 товар, хотя он уже по счету 10й.
    Vladimir
    09 июля 2021, 08:08
    0
    Спасибо всем, обновился, сделал так
    switch ($modx->event->name) {
    
        case 'msOnAddToCart':
            $res = $modx->getObject('modResource', 1);
            $defaultOptPrice = (int)$res->getTVValue('opt_price__default');
            
            $crt = $cart->get();
    
            $currentGoods = $modx->getObject('modResource', (int)$crt[$key]['id']);
            $currentGoodsOptPrice = (int)$currentGoods->getTVValue('opt_price');
            if(((int)$crt[$key]['price'] * (int)$crt[$key]['count']) >= $defaultOptPrice){
                
                $crt[$key]['old_price'] =  $crt[$key]['price'];
                $crt[$key]['price'] = $currentGoodsOptPrice;
                $crt[$key]['discount_price'] = $currentGoodsOptPrice;
                
                
            }
    
            $cart->set($crt);
            break;
     
    }
      Михаил
      09 июля 2021, 12:34
      0
      Потому что когда ты добавляешь второй раз тот же товар то срабатывает msOnChangeInCart
        Vladimir
        09 июля 2021, 13:47
        0
        странно, добавлял один и тот же товар 10 раз, и плагин все равно работает как нужно.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4