Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    39

    [PHP-HTML] Stmpare Directory-Tree come Select annidata

    Premetto che mi sto ricollegando ad un altro mio post:
    http://forum.html.it/forum/showthrea...4#post25381734

    Allora ero riuscito a creare una Select "ramificata" a partire da un array.. questa la funzione:

    Codice PHP:
    function HTMLOptionsTree($menu$sel_id =''$pid 0$depth 0$parent_last=[]) 
    {    
        
    $children=array();
        
        foreach (
    $menu as $item) if ($item["pid"] == $pid)
            
    $children[]=$item;

        foreach (
    $children as $key => $child)
        {     
            if (
    $depth>0)
                foreach (
    $parent_last as $is_last)
                    
    $p_branches.=($is_last '     ' '  │  ' );

            
    $symbol =  $p_branches.'  '.(($key == (count($children)-1)) ? '└' '├').'─▸';

            
    $result .= '<option value="'.$child["id"].'" '.($child["id"]==$sel_id 'selected':'').'>'.$symbol.$child["title"].'</option>'."\n";
            
    $parent_last_new=$parent_last
            
    $parent_last_new[]=(($key == (count($children)-1)) ? 0);
            
            
    $p_branches='';
            
            
    $result.=HTMLOptionsTree($menu$sel_id$child["id"], $depth+1$parent_last_new);   
        } 

        return 
    $result ?  $result null


    Vi allego l'immagine di esempio.

    Adesso ho bisogno di applicare lo stesso ragionamento per visualizzare la ramificazione delle cartelle, passando il path iniziale. Quindi bisognerà chiamare la ricorsione ogni volta che si trova una cartella con "scandir()".

    La cosa importante è che i path che andranno nell' attributo "value" di ogni "OPTION" siano RELATIVI!
    In pratica cosi':

    codice HTML:
    <option value="folder_1">folder_1</option>
    
    <option value="folder_2">folder_2</option>
    
        <option value="folder_2/sub_1">folder_2/sub_1</option>
        <option value="folder_2/sub_2">folder_2/sub_2</option>
        <option value="folder_2/sub_3">folder_2/sub_3</option>
        <option value="folder_2/sub_4">folder_2/sub_4</option>
        
            <option value="folder_2/sub_4/sub_sub_1">folder_2/sub_4/sub_sub_1</option>
            <option value="folder_2/sub_4/sub_sub_2">folder_2/sub_4/sub_sub_2</option>
            
        <option value="folder_2/sub_5">folder_2/sub_5</option>
        
    <option value="folder_3">folder_3</option>

    Mi date una mano? Eddaiiiiii ....

    Sotto vi carico lo screenshot del mio esperimento precedente...
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2015
    residenza
    TORINO
    Messaggi
    37
    Se usi le SPL (standar php library) puoi trovare degli iteratori standard di directory.

    Io li ho utilizzati per clonare una cartella esempio dove c'è lo scheletro di un'app.
    Dài un'occhiata:

    Io ho utilizzato questo esempio http://php.net/manual/en/recursivedirectoryiterator.construct.php

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

    SOLUZIONE (marmz)

    Ok, fatto.
    Ho riadattato la mia funzione in questo modo:

    Codice PHP:
    function HTML_Dir_OptionTree($dir$sel_subpath ''$root '',$depth 0$parent_last=[]) 
    {        
        
    $children=array();
        
    $dir=realpath($dir);
        
        if (
    $root=='')    $rootpreg_replace('/\/+/''/'$dir.'/');
        
    $list scandir($dir);
        
        foreach (
    $list as $obj) if (is_dir($dir.'/'.$obj) && is_readable($dir.'/'.$obj) && !is_link($dir.'/'.$obj) && $obj!=='.' && $obj!=='..') { 
            
    $item['name']=$obj;
            
    $item['realpath']=$dir.'/'.$obj;
            
    $item['subpath'] = preg_replace('/^'preg_quote($root'/') . '/'''$item['realpath']).'/';
            
    $children[]=$item;    
        }

        foreach (
    $children as $key => $child)
        {     
            if (
    $depth>0)
                foreach (
    $parent_last as $is_last)
                    
    $p_branches.=($is_last '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' '&nbsp;&nbsp;│&nbsp;&nbsp;' );

            
    $symbol =  $p_branches.'&nbsp;&nbsp;'.(($key == (count($children)-1)) ? '└' '├').'─▸';
            
            
    $result .= '<option value="'.$child["subpath"].'" '.($child["subpath"]==$sel_subpath 'selected':'').'>'.$symbol.$child["name"].'</option>'."\n";
            
    $parent_last_new=$parent_last
            
    $parent_last_new[]=(($key == (count($children)-1)) ? 0);
            
            
    $p_branches='';
            
            
    $result.=HTML_Dir_OptionTree($child['realpath'], $sel_subpath$root$depth+1$parent_last_new);        
        } 
        return 
    $result ?  $result null




    Si usa cosi':
    PRIMO parametro ($dir): percorso da visualizzare
    SECONDO parametro ($sel_subpath): directory [option] selezionata (richiede SLASH finale).


    Codice PHP:
    <style>
       option {font-family:monospace,monospace; font-size:12px}
    </style>

    <select name="myselect">
       <? echo HTML_Dir_OptionTree('mio/percorso''directory/selezionata/'); ?>
    </select>


    Spero che vi possa essere utile
    Allego uno "shot" di esempio
    Immagini allegate Immagini allegate
    Ultima modifica di marmz; 23-09-2016 a 17:46

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.