I am calling it uncached.
Here's my updated snippet, maybe you can see what I'm obviously missing:
<?php
/* do nothing
if user is not logged in */
if (!$modx->user->hasSessionContext('web')) {
return '';
}
/* process form */
if (isset($_POST['submit'])) {
if (isset($_POST['messages']) &&
(!empty($_POST['messages']))) {
foreach ($_POST['messages'] as $messageId) {
$msg = $modx->getObject('modUserMessage', (int) $messageId);
if ($msg) {
$msg->remove();
}
}
}
}
/* Display messages */
$tpl = $modx->getOption('tpl', $scriptProperties, 'missing Tpl');
$outerTpl = $modx->getOption('outerTpl', $scriptProperties, 'missing Tpl');
$uid = $modx->user->get('id');
$modx->getCollection('modUserMessage', array('recipient' => $uid));
$count = !empty($messages) ? count($messages) : '0';
$modx->setPlaceholder('messageCount', $count);
if (empty($messages)) {
return '<h1>No Messages</h1>';
}
$output = $modx->getChunk($outerTpl);
foreach ($messages as $message) {
$fields = $message->toArray();
$inner .= $modx->getChunk($tpl, $fields);
}
$output = str_replace('[[+messages]]', $inner, $output);
return $output;