2012-12-27 43 views
1
$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.资源缓存关闭;代码段调用也不会被缓存。MODx Revo setTvValue返回旧数据

我曾尝试通过另一种方式来解决这个问题,但它仍然更新我的电视整个页面被重新加载之后才:

$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();,但它并没有伎俩。

+0

你为什么设置电视的价值,然后再把它设置回来?也许你试图做的事情可以有所不同,例如,将第一个值存储在当前页面使用的变量中,以及更改TV值,以便在页面刷新后永久存储。 – okyanet

回答

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)); 
+0

我试过了...下面的代码输出 - 2和2 $ modx-> resource-> setTVValue(11,1); $ modx-> resource-> save(); print_r($ modx - > resource - > getTVValue(11)); $ modx-> resource-> setTVValue(11,2); $ modx-> resource-> save(); print_r($ modx - > resource - > getTVValue(11)); – user1713785

+0

我想说,对象是真的改变,并在经理我可以看到更改的电视价值,但代码返回旧值,只有刷新页面后,我看到新值,不知道为什么((( – user1713785

+0

我编辑我回答。试试这个方法 – Vasis

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->资源与您进入页面时相同。

通过使它成为一个变量,它会在您处理更改时得到更新。