Visualizzazione dei risultati da 1 a 6 su 6

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    39

    [PHP HTML] Creare una Select annidata con caratteri ascii

    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('&nbsp',($depth*7)).(($key == (count($children)-1)) ? '└' : '├').'─&nbsp;';
    
    
            $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 ...
    Immagini allegate Immagini allegate

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.