$docs[]=$v;

Прям так можно, не надо оборачивать в {}? Нет, это моя ошибка, надо оборачивать, то есть {$docs[]=$v;} и еще вот такой код {if $doc = $modx->getObject('modResource',$v) AND $doc->get('template') == 3}

в шаблоне вызывает ошибку. Но в этом случаи, если в цикле не будет получен один из документов по id ($v) ничего не случиться. Можно ли в условии как-то записать все-таки так, положить объект в переменную, а потом через энд вызвать у него гет? Нет, AND Smarty не понимает, как и не понимает типа {if $key != $value}. Но конкретно для этого случая я написал корректный пример: {if $modx->getObject('modResource',$v)->template == 3} Здесь истина будет только в том случае, если будет получен документ и у него шаблон 3.