我正在使用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]]`
问题是,由于某种原因它被缓存。我试着把'!'在所有组合中,仍然会被缓存。如何解决这个问题?
答案 0 :(得分:2)
正在缓存[[~3,所以你的putBoxId实际上只是第一次被调用。
在Revo中 - 任何 * [[ *(标记)可以以开始!(不可缓存标志)。 所以,在你的情况下 - [[! ~3 [[!putBoxId? &amp; tpl ='boxIdUrl']]]] ( 注意: 这里有一个拼写错误,在您的原始问题中,请参阅下面的评论。应该工作:[[~3]] [[!putBoxId?&amp; tpl ='boxIdUrl']] )
更多信息here
更好 - 除非有充分的理由,否则摆脱那个块,因为$ modx-&gt; 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`]]