Metaller Привожу метод класса DocumentParser:
function evalSnippet($snippet, $params) {
$etomite= $modx= & $this;
$modx->event->params= & $params; // store params inside event object
if (is_array($params)) {
extract($params, EXTR_SKIP);
}
ob_start();
$snip= eval ($snippet);
$msg= ob_get_contents();
ob_end_clean();
if ($msg && isset ($php_errormsg)) {
if (!strpos($php_errormsg, ’Deprecated’)) { // ignore php5 strict errors
// log error
$this->logEvent(1, 3, "<b>$php_errormsg</b>
$msg", $this->currentSnippet . " - Snippet");
if ($this->isBackend())
$this->Event->alert("An error occurred while loading. Please see the event log for more information<p />$msg");
}
}
unset ($modx->event->params);
return $msg . $snip;
}
Я выделил блок, который собственно выполняет сниппет.
Как можно заметить, он сохраняет весь буфер вывода и очищает его, поэтому результат echo\print не будет выведен, но результат этого echo\print запомнится, и потом вставится только в соответствующее место документа, а не тупо сбросится в выводной поток.
Поэтому без разницы, как выдывать результат - return, echo или print