io ho risolto un problema simile in questo modo:
Codice PHP:
public function categories_tree($parent=0, $spacer = '') {
$sql = "select * from categories where parent = $parent order by parent";
$result = $this->db->fetchAll($sql);
$num = count($result);
$spacer .= '- ';
foreach($result as $k => $v) {
if($num == 0 || $result[$k]['parent'] == '0') {
$spacer = '';
}
$this->arrCategoriesTree[$result[$k]['id']] = $spacer.$result[$k]['category'];
$this->q++;
$this->categories_tree($result[$k]['id'], $spacer);
}
return $this->arrCategoriesTree;
}
questo metodo dentro una classe. $arrCategoriesTree è una variabile di classe, ovviamente, puoi valorizzarlo cosi:
Codice PHP:
private $arrCategoriesTree = array();
il metodo è richiamata da uno script php, il risultato lo passiamo a smarty:
Codice PHP:
$smarty->assign('loopcategorie', $c->categories_tree());
infine in smarty recupero il valore passato:
Codice PHP:
{foreach from=$loopcategorie key="keyvar" item="itemvar"}
{$itemvar}
{/foreach}
se vuoi metterle in una select fa semplicemente cosi
Codice PHP:
<select>
{html_options options=$loopcategorie}
</select>
nel mio caso il value è la colonna "id" della tabella.
non è esattamente il tuo caso ma secondo me puoi riadattarlo facilmente.
ciao