MODx Revo setTvValue возвращает старые данные

$modx -> resource -> setTVValue(11, 1);
print_r($modx -> resource -> getTVValue(11));

$modx -> resource -> setTVValue(11, 2);
print_r($modx -> resource -> getTVValue(11));

У меня есть фрагмент, который выводит 2 и 2, тогда как он должен выводить 1 и 2. Кэширование ресурсов отключено; вызов фрагмента также не кэшируется.

Я попытался решить эту проблему другим способом, но он все еще обновляет мой телевизор только после перезагрузки всей страницы:

$tv = $modx->getObject('modTemplateVar',array('id'=>'11'));
$tv -> setValue($modx->resource->get('id'), 88);
$tv->save();

print_r($modx -> resource -> getTVValue(11));

Кстати, если я не работаю с телевизорами, все в порядке!

$modx -> resource -> set("pagetitle", 1);
print_r($modx -> resource -> get("pagetitle"));

$modx -> resource -> set("pagetitle", 2);
print_r($modx -> resource -> get("pagetitle"));

Как я могу исправить эту проблему с телевизорами? Я пытался очистить кеш, как это $modx->cacheManager->refresh(); тоже, но это не сработало.

2 ответа

Решение

Хорошо попробуй это

$id_resource = $modx->resource->get('id');
$id_tv = 11;
$value = 88;

$tv = $modx->getObject('modTemplateVar',array('id'=>$id_tv));
$tv -> setValue($id_resource, $value);
$tv->save();

если вам нужно получить ресурс попробуйте это

$id_resource = $modx->resource->get('id');
$id_tv = 11;

$res = $modx->getObject('modResource',array('id'=>$id_resource));
print_r($res->getTVValue($id_tv));

Вам понравится это:

$changeit = 11;
//$changeit= 'templateVarName';
$r = $modx->getObject('modResource', 177);
// or $r = $modx->resource
$tvs = $r->getTemplateVars();
if ($tvs) {
    foreach ($tvs as $object){
        if (is_object($object) && $object instanceof modTemplateVar){
           print_r($object->toArray());
        }
    }
 }

$r->setTVValue($changeit,'99999fhfhg');
echo '<hr>'. $r->getTVValue($changeit);
$r->setTVValue($changeit,'888885454564');
echo '<hr>'. $r->getTVValue($changeit);
$r->setTVValue($changeit,'123456789');
echo '<hr>'. $r->getTVValue($changeit);

Отправив его

$changeit = '11';

Он становится строкой, а is_string имеет значение true и, таким образом, обрабатывает запрос, как будто имя равно 11, а не ID. Вы можете отправить либо id или name телевизора. Лично я использую только имена, так как с ними гораздо легче иметь дело позже.

Код, который я разместил, работает и был протестирован.

Я буду подавать отчет об ошибке по этому вопросу, потому что это должно быть немного чище.

Кроме того, вы извлекаете текущий ресурс, обновляете его и т. Д. Но вы не перезагружаете "свежую" версию ресурса после его обновления. Вы находитесь в действии, глядя на одну и ту же переменную в одном и том же состоянии дважды.

Мод-> ресурс такой же, как и при входе на страницу.

Делая его переменным, он обновляется по мере того, как вы обрабатываете изменения.

Другие вопросы по тегам