1

我正在使用 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]]`

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

4

1 回答 1

2

[[~3 正在被缓存,因此您的 putBoxId 实际上仅在第一次被调用。

在 Revo 中,任何* [[ *( tag ) 都可以以! 不可缓存标志)。 所以,在你的情况下 - [[!~3[[!putBoxId? &tpl='boxIdUrl']] ]]注意:这里有一个错字,在您的原始问题中,请参阅下面的评论。这应该有效: [[~3]][[!putBoxId? &tpl='boxIdUrl']]

更多信息在这里


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

使用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`]]
于 2011-06-09T19:48:29.813 回答