Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema creazione menu tree

    Buon pomeriggio ho questa situazione e non ne esco fuori.
    In pratica devo costruire un albero di cartelle, sottocartelle e relativi file, per ogni sottocartella trovata.
    La struttura è:
    1) Cartella Madre
    2) 2 cartelle figlie
    3) 1 file per ogni cartella figlia

    la struttura che ho mi permette soltanto di visualizzare fino alla 2° cartella figlia, ma non il relativo file...
    codice:
    <ul style="list-style-type:none;" id="menu">
    	[*]RELAZIONE
    		
    <?php
    	$path="../DOC/Relazione/";
    	
    	if (is_dir($path)) {
    		if ($handle = opendir($path)) {	
    			/* Questa è la maniera corretta di eseguire un loop all'interno di una directory. */
    			echo "<ul class=\"tree-menu\">";
    			//vedo la cartella anno_2009/2010
    			while (false !== ($file = readdir($handle))) {
    				if(($file != '.') && ($file != '..') && ($file != 'Thumbs.db')){
    					echo "[*]<a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file))."</a>";
    					
    					$path=$path.$file."/";
    					//submenu a cartelle
    					if (is_dir($path)) {
    						if ($handle2 = opendir($path)) {
    							echo "<ul>";
    							//vedo la cartella mese
    							while (false !== ($file2 = readdir($handle2))) {
    								if(($file2 != '.') && ($file2 != '..') && ($file2 != 'Thumbs.db')){
    									echo "[*]<a href=\"".$path.$file2."\">".strtoupper(str_replace("_"," ",$file2))."</a>";
    								}
    							}
    							echo "[/list]";
    						}
    					}
    				}
    			}
    			echo "<ul>[/list]";
    		}
    		closedir($handle);
    	}
    ?>
    			
    		
    	[/list]
    In pratica la struttura è questa:
    1) Relazione
    1.1) anno 2008
    1.1.1) file.pdf
    1.2) anno 2009
    1.2.1) file.pdf

    E' come se il ciclo lo esegue soltanto una volta fermandosi alla cartella e basta.

    Potete aiutarmi cortesemente?
    Grazie mille

  2. #2
    non mi sembra di vedere errori nel codice, piuttosto mi pare confuso il tuo approccio logico
    il codice che hai postato analizza la cartella con una profondita' di due livelli, di cui il primo e' la cartella stessa:
    livello 1: analizza la cartella madre e mostra le cartelle con gli anni
    livello 2: analizza la cartella dell'anno e mostra il suo contenuto

    intanto, generalmente si utilizza un approccio ricorsivo per questo genere di cose.
    se pero' la struttura e' come dici tu, dovrebbe funzionare ugualmente, ma io nel codice leggo
    // vedo la cartella mese
    percio', come stanno le cose? li' dentro c'e' il tuo .pdf, o la cartella e' divisa ulteriormente?

    sarebbe comunque utile se postassi quello che stampa a video, cosi' da capire meglio

    ciao
    danno

  3. #3
    Puoi provare ad usare queste, facendo le opportune sistemazioni

    Codice PHP:
    function filesInDir($tdir)
    {
       
    $dirs scandir($tdir);
        foreach(
    $dirs as $file)
        {
            if ((
    $file == '.')||($file == '..'))
            continue;
        elseif (
    is_dir($tdir.'/'.$file))
        {
            
    filesInDir($tdir.'/'.$file);
        }
        else
        {
            echo 
    $file
        }
        }


  4. #4
    salve ragazzi, posto l'immagine di come deve essere

    dove indico come commento //vedo la cartella mese, in realtà li devo visualizzare il file

    grazie ancora ragazzi
    Immagini allegate Immagini allegate

  5. #5
    risolto, il problema era che la path, essendo dichiarata sempre con lo stesso nome "$path" ad ogni giro ricaricava lo stesso valore, e quindi la stessa directory, quindi ho dovuto istanziare un nuovo nome per la path "$path2", in pratica:

    codice:
    <ul style="list-style-type:none;" id="menu">
    	[*]RELAZIONE
    <?php
    	$path="../DOC/Relazione/";
    	
    	if (is_dir($path)) {
    		if ($handle = opendir($path)) {	
    			/* Questa è la maniera corretta di eseguire un loop all'interno di una directory. */
    			echo "<ul class=\"tree-menu\">";
    			//vedo la cartella anno_2009/2010
    			while (false !== ($file = readdir($handle))) {
    				if(($file != '.') && ($file != '..') && ($file != 'Thumbs.db')){
    					//echo "[*]<a href=\"javascript:void(0)\">$file - Product Three</a>";
    					echo "[*]<a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file))."</a>";
             //ho dovuto rinominare a questo punto la path da $path a $path2
    					$path2=$path.$file."/";
    					//submenu a cartelle
    					if (is_dir($path2)) {
    						if ($handle2 = opendir($path2)) {
    							echo "<ul>";
    							//vedo la cartella mese
    							while (false !== ($file2 = readdir($handle2))) {
    								if(($file2 != '.') && ($file2 != '..') && ($file2 != 'Thumbs.db')){
    									echo "[*]<a href=\"".$path2.$file2."\">".strtoupper(str_replace("_"," ",$file2))."</a>";
    								}
    							}
    						}
    						echo "[/list]";
    						closedir($handle2);
    					}
    				}
    			}
    			echo "[/list]";
    		}
    		closedir($handle);
    	}
    ?>
    	[/list]

    Grazie mille e buona giornata

  6. #6
    Con la funzione che ti ho postato, avresti evitato almeno la metà di codice

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.