Заказать через форму заказать в 1 клик

при оформлении заказа через дополнение OneClick, нужно чтобы плагин проверял: если свойство товара «sod» не ровно нулю, то стоимость товара(каждого) рассчитывало по такой схеме = цена(за единицу) * sod

<?php
switch ($modx->event->name) {
     case 'msOnBeforeAddToOrder': case 'msOnAddToOrder':
        $orderArray = $order->get(); 
        foreach ($orderArray as &$orderProduct) {
            if ($product = $modx->getObject('msProduct', $orderProduct['id'])) { // Получаем объект товара по его ID в корзине
            $count = $orderProduct['count'];
                if ($count > 0){
                    if ($product->get('sod') > 0){
                    $tv = $product->get('price') * $product->get('sod');
                    }
                    else { $tv = $product->get('price');}
                    $pr =  $tv;
                }
                $orderProduct['cost'] =  $pr;
            }
            else{
                if ($count > 0){
                    if ($product->get('sod') > 0){
                    $tv = $product->get('price') * $product->get('sod');
                    }
                    else { $tv = $product->get('price');}
                    $pr =  $tv;
                }
                    $cart->set('cost', $pr);
            }
        }
        $order->set($orderArray);
        break;
}
Максим
17 февраля 2018, 14:03
modx.pro
696
0

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

Михаил
17 февраля 2018, 20:11
0
Вот так как то читабельнее
?php
switch ($modx->event->name) {
case 'msOnBeforeAddToCart': case 'msOnAddToCart': case 'msOnChangeInCart': // Обрабатывать только события добавления в корзину и изменения количества
$cartArray = $cart->get(); // Массив корзины
$cartStatus = $cart->status(); // Состояние корзины
foreach ($cartArray as &$cartProduct) { // Обрабатываем все товары корзины
if ($product = $modx->getObject('msProduct', $cartProduct['id'])) { // Получаем объект товара по его ID в корзине
$count = $cartProduct['count'];
if ($count >0 && $product->get('sod')>0){
$tv = $product->get('price') * $product->get('sod');
$pr = $tv;
}
}
else{
if ($count >0 && $product->get('sod')>0){
$tv = $product->get('price') * $product->get('sod');
$pr = $tv;
}
$product->set('price', $pr);
}
}
$cart->set($cartArray); // Запись нового состояния корзины
break;
}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1