Credo di aver capito!!!
io ho questa funzione lato php
codice:
function &cicla_cat($id,&$cat_sup) {
$sql_cat=mysql_query('SELECT * FROM '.$GLOBALS['db_pref'].'categorie_produzione WHERE categoria_superiore="'.$id.'" ORDER BY categoria_pos;');
echo mysql_error();
if (mysql_num_rows($sql_cat)>0) {
$k=0;
while ($fetch_cat=mysql_fetch_assoc($sql_cat)) {
$cat_sup[$k]['id']=$fetch_cat['categoria_id'];
$cat_sup[$k]['nome']=$fetch_cat['categoria_nome'];
cicla_cat($fetch_cat['categoria_id'],$cat_sup[$k]);
$k++;
}
}
}
che crea il famoso array di cui sopra .. allora adesso per ogni livello faccio un count dei figli in modo tale che a smarty passo il numero di volte che deve ciclare ... provo e ti faccio sapere 
Grazie mille Mike