MiniShop2. Вывод во фронтенд цен товаров из корзины без скидки.

Добрый день.
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart':
    case 'msOnRemoveFromCart':
    case 'msOnAddToCart':
        $discount = 0;
        $status = $cart->status();
        $tmp = $cart->get();
        //Cтавим изначальную цену без скидок
        foreach($tmp as $_key=>$cartItem) {
            if ($product = $modx->getObject('msProduct', $cartItem['id'])) {
                $tmp[$_key]['clear_price'] = $product->get('price');
                $tmp[$_key]['price'] = $product->get('price');
            }
        }
        if($status['total_cost']>=6000) $discount = 5;
        elseif($status['total_cost']>=3000) $discount = 3;
        //Если есть скидка, пересчитываем цены на товары в $tmp
        if($discount>0) {
            foreach ($tmp as $_key=>$cartItem) {
                if ($product = $modx->getObject('msProduct', $cartItem['id'])) {;
                    $tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
                }
            }
        }
        //Записываем данные в корзину
        $cart->set($tmp);
        //$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
        break; 
}
В коде к товарам корзины я добавил дополнительное поле clear_price, в котором хранится цена товара без скидок. Как можно вывести его в чанк корзины msCart?

UPD В чанке корзины есть примерно такой код:
{foreach $products as $product}   
    ...{$product.clear_price}...
    ...{$product.price}...
{/foreach}

Я хочу передать в чанк некие данные, расчитанные в плагине. {$product.price} передаёт высчитанную цену как и положено. {$product.clear_price} не отображается. Как мне это сделать?

UPD2 Обнаружился странный глюк(?). Если я использую для передачи цены без скидки поле old_price товара корзины, то в чанке fenom передаёт её корректно в код {$product.old_price}, но… в зависимости от суммы заказа! Т.е. если сумма заказа более определённой цифры, передаётся вычисленная мной цена, если меньше, передаётся значение, которое хранится в поле old_price данного товара в каталоге. Сейчас код плагина у меня такой:
<?php
switch ($modx->event->name) {
    case 'msOnAddToCart':
    case 'msOnChangeInCart':
    case 'msOnRemoveFromCart':
        $discount = 0;
        $status = $cart->status();
        $tmp = $cart->get();
        foreach ($tmp as $_key=>$cartItem) {
            if($product = $modx->getObject('msProduct', $cartItem['id'])) {
                $tmp[$_key]['old_price'] = $product->get('price'); // #3
                if($status['total_cost']>=6000) $discount = 5; // #1
                elseif($status['total_cost']>=3000) $discount = 3;// #2
                $tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
            }
        }
        //Записываем данные в корзину
        $cart->set($tmp);
        $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
        break; 
}
Методом тыка пришёл к выводу, что строки #1 и #2 каким-то образом влияют на значение в {$product.old_price} в чанке. Причём проверка через $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true)); показывает, что значение old_price в строке #3 устанавливается, но почему-то не передаётся в чанк.
Артём
20 ноября 2018, 15:23
modx.pro
694
0

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0