Изменение цены в зависимости от типа валюты (в tv-параметре)
<?php
switch($modx->event->name) { 
    case 'msOnGetProductFields':
        $returned_values = & $modx->event->returnedValues;
        $values =  $modx->event->params['data'];
        $product = $modx->getObject('msProduct', $product->id);
        $currency_type = $product->getTVValue('valuta'); //Тип валюты
        $currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса
        
        if (isset($currency)) {
            $returned_values['price'] = round($values['price'] * $currency); // Округление цены;
        }       
        
        $modx->log(1,'returned_price - ' . $returned_values['price'] );
        $modx->log(1,'current_type - ' . $currency_type );
        $modx->log(1,'currency - ' . $currency );
        break;
}Почему-то логи пишет корректно, но цена не меняется.Если убрать эти строки
$product = $modx->getObject('msProduct', $product->id);
        $currency_type = $product->getTVValue('valuta'); //Тип валюты
        $currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса, работает. С ними все ломается…    Комментарии: 3
                Попробуйте так (только вместо 999999 укажите ID TV-шки valuta):
                    //...
if($tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => 999999,'contentid' => $product->id))) {
    $currency_type = $tvo->get('value');
    $currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса
}
//...            
                Спасибо, заработало! А чем разница вызова?            
                    
                В плагинах getTVValue не всегда срабатывает.
Надежнее получать данные непосредственно из TV по ID ресурса.
                    Надежнее получать данные непосредственно из TV по ID ресурса.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.