Search code examples
modx

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?


Solution

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