Aleksei Averchenko
Aleksei Averchenko

Reputation: 1776

MODx caches what it shouldn't

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?

Upvotes: 1

Views: 834

Answers (1)

oori
oori

Reputation: 5711

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`]]

Upvotes: 2

Related Questions