Изменение цены в зависимости от типа валюты (в 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 ресурса.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.