Некэшируемые TV

Здравствуйте.
Подскажите, пожалуйста, каким образом можно выводить TV некэшируемым?
TV обновляется каждый день через cron (стоимость в евро переводится в рубли по курсу цб). Кэш не чистится.
Пробовал и не работает:
1.
[[!+tv.clock_price_rub]]
2.
[[!CRcalc? &input=`[[+tv.clock_price]]` &multiplier=`EUR` &format=`[0, ".", " "]` &noZeros=`0`]]   (это сниппет перевода из евро в рубли по текущему курсу, то же самое, что и запущено по cron, только в скрипте, который запускается через cron, значения записываются в БД, а здесь просто выводятся)
3.
[[!getUncachedPriceRub? &id=`[[+id]]` &name_tv=`clock_price_rub`]]
getUncachedPriceRub:
$tv = $modx->getObject('modResource', array('id' => $id));
return $tv->getTVValue($name_tv);
4.
[[!+results]] (используется mFilter2)
Каждый раз TV всё равно выводится кэшированным(( Очищать кэш ресурсов из-за одного TV не хочется.
Александр
19 марта 2017, 15:34
modx.pro
949
0

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

Александр
21 июня 2017, 11:35
0
Нашёл решение.
Чтобы получать некэшируемые значения TV, нужно в сниппете делать запросы к БД.
Сниппет getTVValue:
$resourceID = $modx->resource->get('id');

/* Получаем id объекта modTemplateVar  */
$tv = $modx->getObject('modTemplateVar', array(
	'name' => $tvName,
));
$tvID = $tv->get('id');
 
/* Получаем значение объекта modTemplateVarResource */
$query = $modx->newQuery('modTemplateVarResource', array(
	'contentid' => $resourceID,
	'tmplvarid' => $tvID,
));
$query->select('value');
$value = $modx->getValue($query->prepare());

return $value;
Вызываем сниппет getTVValue:
[[!getTVValue? &tvName=`Имя TV`]]
    Василий Наумкин
    21 июня 2017, 13:00
    1
    +2
    pdoTools и PHP5.4+
    <?php
    $pdo = $modx->getService('pdoFetch');
    
    return $pdo->getArray('modTemplateVarResource', 
        ['contentid' => $modx->resource->id , 'TemplateVar.name' => $tvName], 
        ['innerJoin' => ['TemplateVar' => ['class' => 'modTemplateVar']]]
    )['value'];
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2