$docs[]=$v;
Прям так можно, не надо оборачивать в {}?
{$docs[]=$v;}
и еще вот такой код
{if $doc = $modx->getObject('modResource',$v) AND $doc->get('template') == 3}
в шаблоне вызывает ошибку. Но в этом случаи, если в цикле не будет получен один из документов по id ($v) ничего не случиться. Можно ли в условии как-то записать все-таки так, положить объект в переменную, а потом через энд вызвать у него гет? Я вот так делаю, вроде работает, но может можно лучше-проще?
{foreach from=$myArray key=k item=v} {if $doc = $modx->getObject('modResource',$v)} {if $doc->get('template') == 3} {$docs[]= $v} {else} {$folder[] = $v} {/if} {/if} {/foreach}