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。资源缓存已关闭;片段调用也不会被缓存。

我试图通过另一种方式解决这个问题,但它仍然只有在整个页面重新加载后才会更新我的电视:

$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();,但没有奏效。

4

2 回答 2

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));
于 2012-12-27T09:52:56.677 回答
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 为真,从而将请求处理为好像名称是 11,而不是 ID。您可以发送电视的idname。我个人只使用名称,因为以后处理起来要容易得多。

我放置的代码有效并经过测试。

我将为此提交一份错误报告,因为它应该更干净一些。

此外,您检索当前资源,对其进行更新等。但是在更新后您不会重新加载资源的“新”版本。您在同一状态下两次查看相同的 var 时会受到影响。

mod->resource 与您进入页面时相同。

通过将其设为 var,它会在您处理更改时得到更新。

于 2015-08-09T23:42:32.300 回答