MODx 缓存了不应该缓存的内容

发布于 2024-11-13 12:59:33 字数 441 浏览 1 评论 0原文

我正在使用 MODx revo。我编写了一个名为 putBoxId 的代码片段,其中包含以下内容:

<?php
$id = isset($_GET['id']) ? $_GET['id'] : null;

if (!is_null($id)) {
    return $modx->getChunk($tpl, array('id' => $id));
}

return '';

我这样使用它: [[~3[[!putBoxId? &tpl='boxIdUrl']] ]] (当然,带有反引号),其中 boxIdUrl 是具有以下内容的块:

? &id=`[[+id]]`

问题是,由于某种原因它被缓存了。我尝试输入“!”在所有组合中,仍然会被缓存。如何解决这个问题?

I'm working with MODx revo. I wrote a snippet called putBoxId with the following content:

<?php
$id = isset($_GET['id']) ? $_GET['id'] : null;

if (!is_null($id)) {
    return $modx->getChunk($tpl, array('id' => $id));
}

return '';

I use it like this: [[~3[[!putBoxId? &tpl='boxIdUrl']] ]] (with backticks, of course), where boxIdUrl is the chunk with the following content:

? &id=`[[+id]]`

The problem is, for some reason it gets cached. I tried putting '!' In all combinations, still gets cached. How can this be fixed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

征棹 2024-11-20 12:59:33

[[~3 正在被缓存,所以你的 putBoxId 实际上只在第一次被调用。

在 Revo 中 - 任何 *[[* (标签) 可以以 ! 开头(非可缓存标志)。 所以,在你的情况下 - [[!~3[[!putBoxId? &tpl='boxIdUrl']] ]]注意:此处存在拼写错误,在您原来的问题中,请参阅下面的评论。此应该有效:[[~3]][[!putBoxId? &tpl='boxIdUrl']])

更多信息 这里


更好 - 除非有充分的理由,否则删除该块,因为 $modx->getChunk 调用不会在您的场景中缓存(前往数据库获取模板等...)。

使用 modx->makeUrl ( 在代码片段本身中完成所有操作请参阅链接了解更多选项)

<?php
$resourceId = $modx->getOption('resourceId', $properties, $modx->resource->get('id'));  // get resourceId from snippet, default to current
$args = (!empty($_REQUEST['id']))? array('id'=>$_REQUEST['id']) : '';
return $modx->makeUrl($resourceId, '', $args);

像这样调用:

[[!putBoxId]] or [[!putBoxId? &resourceId=`3`]]

The [[~3 is being cached, so your putBoxId is actually called only the first time.

In Revo - any *[[* (tag) can start with a ! (non-cacheable flag). So, in your case - [[!~3[[!putBoxId? &tpl='boxIdUrl']] ]] (note: there's a typo here and in your original question, see comment below. this should work: [[~3]][[!putBoxId? &tpl='boxIdUrl']])

more info here


Even better - unless there's a good reason, get rid of that chunk, as the $modx->getChunk call wouldn't be cached in your scenario (goes to db to get template, etc...).

Do it all in the snippet itself using modx->makeUrl (see link for more options)

<?php
$resourceId = $modx->getOption('resourceId', $properties, $modx->resource->get('id'));  // get resourceId from snippet, default to current
$args = (!empty($_REQUEST['id']))? array('id'=>$_REQUEST['id']) : '';
return $modx->makeUrl($resourceId, '', $args);

Call like this:

[[!putBoxId]] or [[!putBoxId? &resourceId=`3`]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文