首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MODx Revo setTvValue返回旧数据

MODx Revo setTvValue返回旧数据
EN

Stack Overflow用户
提问于 2012-12-27 17:18:19
回答 2查看 1.9K关注 0票数 1
代码语言:javascript
复制
$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。资源缓存已关闭;代码片段调用也不缓存。

我尝试过用另一种方法来解决这个问题,但它仍然只在整个页面重新加载后才更新我的电视:

代码语言:javascript
复制
$tv = $modx->getObject('modTemplateVar',array('id'=>'11'));
$tv -> setValue($modx->resource->get('id'), 88);
$tv->save();

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

顺便说一下,如果我不在电视上工作,一切都很好!

代码语言:javascript
复制
$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();清除缓存,但它没有起到作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-27 17:52:57

好的,试试这个

代码语言:javascript
复制
$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();

如果您需要获取资源,请尝试以下内容

代码语言:javascript
复制
$id_resource = $modx->resource->get('id');
$id_tv = 11;

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

Stack Overflow用户

发布于 2015-08-10 07:42:32

你会喜欢这个的:

代码语言:javascript
复制
$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);

通过发送它

代码语言:javascript
复制
$changeit = '11';

它会变成一个字符串,并且is_string为true,因此会将请求当作name 11来处理,而不是ID。您可以发送TV的idname。我个人只使用名字,因为以后处理起来容易得多。

我放置的代码工作正常,并经过测试。

我将为此提交一份bug报告,因为它应该是稍微干净一点的。

此外,您可以检索当前资源,更新它,等等。但是在资源更新后,您不会重新加载资源的“新”版本。实际上,您在同一状态下查看相同的变量两次。

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

通过将其设置为var,它会随着您的更改而更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14052207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档