$docs[]=$v; Прям так можно, не надо оборачивать

$docs[]=$v;

Прям так можно, не надо оборачивать в {}?

Нет, это моя ошибка, надо оборачивать, то есть

{$docs[]=$v;}

и еще вот такой код

{if $doc = $modx->getObject('modResource',$v) AND $doc->get('template') == 3}

в шаблоне вызывает ошибку. Но в этом случаи, если в цикле не будет получен один из документов по id ($v) ничего не случиться. Можно ли в условии как-то записать все-таки так, положить объект в переменную, а потом через энд вызвать у него гет?

Нет, AND Smarty не понимает, как и не понимает типа {if key!=key != value}. Но конкретно для этого случая я написал корректный пример:

{if $modx->getObject('modResource',$v)->template == 3}

Здесь истина будет только в том случае, если будет получен документ и у него шаблон 3.