1. у меня массив должен формироваться в шаблоне, вариант отпадает
3. я примерно так и решил задачу, написал функцию, которая присваивает переменной массив значений
function smarty_function_set_array( $params, &$smarty ){
if ( isset($params['assign']) && $params['assign'] !== '' && isset($params['array']) && $params['array'] !== '' ){
$smarty->assign($params['assign'], explode(',', $params['array']));
}
}
используется так
{set_array assign=foo array='1,2,3'}
далее переменная foo это массив
нашел еще такой вариант http://smarty.incutio.com/?page=Set