Sto cercando di stampare una <SELECT>, con elementi annidati tramite entità html.
La funzione HTMLOptions() :
codice:
<?
function HTMLOptions($menu, $sel_id ='', $parentid = 0, $depth = 0)
{
$children=array();
foreach ($menu as $item) if ($item["parentid"] == $parentid)
$children[]=$item;
foreach ($children as $key => $child)
{
if ($depth > 0)
$symbol = str_repeat(' ',($depth*7)).(($key == (count($children)-1)) ? '└' : '├').'─ ';
$result .= '<option value="'.$child["id"].'" '.($child["id"]==$sel_id ? 'selected':'').'>'.$symbol.$child["title"].'</option>'."\n";
$result.=HTMLOptions($menu, $sel_id, $child["id"], $depth+1);
}
return $result ? $result : null;
}
?>
prende in input un array di questo tipo:
codice:
<?
MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'Pagine', 'url' => '.admin/'];
$pid_dep_1=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Contenuti', 'url' => '.admin/?mode=content'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'News', 'url' => '.admin/?plugin=news'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'Files', 'url' => '.admin/?plugin=files'];
$pid_dep_1=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Ftp', 'url' => '.admin/?plugin=files&mode=ftp'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'Video', 'url' => '.admin/?plugin=video'];
$pid_dep_1=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Assegna', 'url' => '.admin/?plugin=video&mode=sec'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Ftp', 'url' => '.admin/?plugin=video&mode=ftp'];
$pid_dep_2=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_2, 'title' => 'Ftp 1', 'url' => '.admin/?plugin=video&mode=ftp&sub=1'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_2, 'title' => 'Ftp 2', 'url' => '.admin/?plugin=video&mode=ftp&sub=2'];
$pid_dep_3=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_3, 'title' => 'Sub Ftp 2-1', 'url' => '.admin/?plugin=video&mode=ftp&sub=2-1'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_3, 'title' => 'Sub Ftp 2-2', 'url' => '.admin/?plugin=video&mode=ftp&sub=2-1'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_2, 'title' => 'Ftp 3', 'url' => '.admin/?plugin=video&mode=ftp&sub=3'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Nuovi', 'url' => '.admin/?plugin=video&mode=nuovi'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'Audio', 'url' => '.admin/?plugin=audio'];
$pid_dep_1=$id;
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Assegna', 'url' => '.admin/?plugin=audio&mode=sec'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => $pid_dep_1, 'title' => 'Ftp', 'url' => '.admin/?plugin=audio&mode=ftp'];
$MENU_SELECT[]=['id' => ++$id, 'parentid' => 0, 'title' => 'Info', 'url' => '.admin/?mode=info'];
?>
Quindi, chiamando:
codice:
HTMLOptions($MENU_SELECT)
;
Viene stampata la lista delle <option>, con una "treeview" pseudo-annidata, usando dei caratteri ascii per simulare la ramificazione.
Il problema è questo:
come potete vedere dall' immagine in allegato, la ramificazione non è perfetta. Mancano, infatti, dei "rami" e si formano dei "buchi".. tipo dalla sezione "Video -> Ftp" alla sezione "Video -> Nuovi" (manca il "collegamento" verticale").
Spero di essere stato chiaro..
Purtroppo capisco che non sia facile trovare una soluzione. Sicuramente è risolvibile con un espressione matematica, legata alla variabile $depth ...