$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.