【问题标题】:My FormIt hook gets cached and it's screwing up every run after the 1st我的 FormIt 钩子被缓存了,它在第一次之后的每次运行都搞砸了
【发布时间】:2012-12-06 00:05:29
【问题描述】:

我将以下 sn-p 代码连接到 FormIt 电子邮件表单:

$tv = "taken" . (int)$hook->getValue('datetime');
$docID = $modx->resource->get('id'); //get the page id
$page = $modx->getObject('modResource', $docID);
$current = (int)$page->getTVValue($tv);
if (!$page->setTVValue($tv, $current + 1)) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem saving your TV...');
}
$modx->setPlaceholder('successMessage','<h2 class="success">'.$current.'</h2>');
return true;`

它每次运行时都会增加一个模板变量并输出成功消息(尽管现在我正在使用该功能来输出调试消息)。问题是,它只在保存 sn-p 后增加电视一次,从而刷新缓存。通常我会通过附加来调用没有缓存的sn-p!以它的名字命名,但这似乎不适用于 FormIt 钩子。我怎样才能让这个代码工作?现在我将整个页面作为不可缓存的方式运行,但这显然不是最理想的。也许,有一种方法可以以未缓存的方式挂钩 sn-p?从 sn-p 中调用 sn-p 作为未缓存?

【问题讨论】:

    标签: caching modx modx-revolution formit


    【解决方案1】:

    我正在做类似的事情 - 但要计算页面加载,在我看来您缺少最后一点:$current->save();

    <?php
    $docID = $modx->resource->get('id');
    
    $tvIdm = 32;
    $tvm = $modx->getObject('modTemplateVar',$tvIdm );
    $tvm->setValue($docID, $tvm->getValue($docID) + 1 );
    $tvm->save();
    

    【讨论】:

    • 不幸的是,这以同样的方式失败 - 在第一次运行时工作,然后停止;重新保存给了我 1 次良好的运行,然后它再次停止工作。好吧,如果它没有自动提交,那将是一个奇迹 - setTVvalue 自动提交,如果没有,它也不会在第一次运行时增加。
    【解决方案2】:

    尝试在保存 $tv 对象之前添加它

    $tv->_processed = false;

    它源自 modElement 的扩展属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多