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 ...

Rispondi quotando
