Меняется old_price при изменении price в плагине

При изменении цены через плагин (события: msOnGetProductPrice, msOnBeforeAddToCart, msOnAddToCart) перезаписывается значение поля old_price значением price (до изменения). Как сделать так, чтобы значение не изменялось или записать в него свое значение?

Плагин:
<?php
switch ($modx->event->name) {
    case 'msOnGetProductPrice':
        if ($modx->context->key == 'mgr') {
            return '';
        }
        $currencyrate = $modx->getService('currencyrate', 'currencyrate',
            $modx->getOption('currencyrate_core_path', null,
                $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', $scriptProperties);
        if (!($currencyrate instanceof currencyrate)) {
            return '';
        }
        $currency = $currencyrate->currency;
        if ($currency == $modx->getOption('currencyrate_currency')) {
            return '';
        }
        $list = $currencyrate->getList();
        
	$values = & $modx->event->returnedValues;
        
        if (!isset($modx->event->returnedValues['price'])) {
            $modx->event->returnedValues['price'] = $price;
        }
        $price = &$modx->event->returnedValues['price'];
        $new_price = ($price * $list[EUR]) / $list[$currency];
        if ($new_price !== false) {
            $price = $new_price;
        }
        
        break;
}
Игорь Терентьев
19 июля 2017, 10:39
modx.pro
1 882
0

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

Борис
13 августа 2017, 18:29
0
Приветствую. Удалось решить задачу?
После работы похожего плагина в old_price записывается значение price.
    Игорь Терентьев
    13 августа 2017, 18:54
    0
    В итоге записывал старую цену в опции.
    На странице товара:
    <input type="hidden" name="options[old_price]" value="{$old_price | calcPrice}">
    В корзине:
    <div class="cpi__price-final"> <span class="price">{$product.price} {$.cookie['currency']}</span> </div>
    {if $product.options[old_price]?}
        <div class="cgray"> <s> <span class="price">{$product.options[old_price]} {$.cookie['currency']}</span> </s> </div>
    {/if}
    Кирилл Киселев
    11 августа 2018, 23:00
    0
    Хм. А как наоборот сделать? У меня не записывает в old_price…
      Игорь Терентьев
      11 августа 2018, 23:15
      0
      Насколько я помню, у меня тоже в плагине на это событие не удавалось записать old_price
        Кирилл Киселев
        11 августа 2018, 23:57
        1
        0
        Расширил корзину, скопировав основной класс, просто добавил
        $old_price = $product->loadData()->get('old_price');
        И вставил сюда
        $this->cart[$key] = array(
            'id' => $id,
            'price' => $price,
            'old_price' => $old_price,
            'weight' => $weight,
            'count' => $count,
            'options' => $options,
            'ctx' => $this->modx->context->get('key'),
        );
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5