MODx Revo setTvValue返回旧数据

时间:2012-12-27 09:18:19

标签: modx modx-revolution modx-resources

$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 个答案:

答案 0 :(得分:0)

好的,试试这个

$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));

答案 1 :(得分:0)

你会喜欢这个:

$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。您可以发送电视的idname。我个人只使用名字,因为以后更容易处理。

我放置的代码可以使用并经过测试。

我将提交一份关于此的错误报告,因为它应该是一个有点清洁。

此外,您检索当前资源,更新它等。但是在更新后您不会重新加载资源的“新”版本。你有效地在同一个状态下查看同一个var两次。

mod-&gt;资源与您进入页面时相同。

通过将其变为var,它会在您处理更改时进行更新。