Очень часто сталкиваюсь с задачей при написании своих сниппетов и модулей к MODx Evolution. Чанки очень удобно использовать как шаблоны для вывода результата работы своего сниппета. Но есть одна большая проблема, с которой, судя по всему, сталкиваюсь не только я.
Если в чанке стоит вызов сниппета, то вызвав $modx->getChunk('chunkname') мы получим код вызова сниппета, а не результат его работы, как ожидается.
Готового решения в сети я не нашел. А для себя решил сохранить промежуточное решение-костыль. В будущем нужно будет доработать его. Либо разобраться в устройстве MODx настолько, чтобы парсить эти чертовы сниппеты системными средствами, либо написать функцию, которая умеет это делать и просто включать ее когда нужно.
А пока что костыль выглядит так:
$test = $modx->parseDocumentSource($modx->getChunk('ChunkName'));
$test = $modx->evalSnippets($test);
В первой строке мы получаем содержимое чанка и отдаем его в функцию parseDocumentSource. Там происходит подстановка разных переменных. Например, [*id*]. А затем вызываем функцию, которая призвана искать в тексте, переданном в аргументе сниппеты и выполнять их, а результат — возвращать. evalSnippets.
Все бы хорошо, но evalSnippets почему-то умеет искать и выполнять только кэшируемые сниппеты. То есть вызов [!Snippet!] не распознается, а вот [[Snippet]] будет выполнен.
Если у кого-то есть решение лучше — буду рад увидеть.