PDA

View Full Version : [PHP] Indicizzare cartelle con Opendir()


Ludo237
13-04-2011, 19:08
Ciao a tutti :ciapet:

Ecco il mio problema di oggi ...
Tramite questo piccolo script creo un menù con tutte le cartelle in una determinata Directory (definita con la costante) e per ogni cartella visualizzo il nome.

<div id="colonna">
<?php
define("Dir","principale/") ;
$NomeDirectory = $file->Apri_cartella(Dir) ;
foreach($NomeDirectory as $cartella)
{
?>
<div class="lettera">
<?php
echo basename($cartella) ;
?>
</div>
<?php
}
?>
</div>


questa è la funzione Apri_file

function Apri_Cartella($cartella)
{
if (is_dir($cartella))
{
if ($this->diropen = opendir($cartella))
{
while (($this->files = readdir($this->diropen)) !== false)
{
if($this->files == ".." || $this->files == ".") ;
else $this->array_file[] = $this->files ;
}
closedir($this->diropen);
}
}
asort($this->array_file) ;
return $this->array_file ;
}


cosi facendo funziona tutto, il mio problema è che esce un accozzaglia di nomi (anche se lo stile css li stampa in modo carino e presentabile)
la mia domanda è
"Posso creare degli indici dinamici?" mi spiego
io ho 5 cartelle principale/a, principale/ab, principale/b, principale/bc, principale/c

con lo script sopra ora ottento a ab b bc c
io vorrei creare qualcosa di questo genere
A
a ab
B
b bc
C
c

per farlo pensavo di prendere la prima lettera della cartella (durante il foearch del primo script postato) e confrontarlo in qualche modo per creare l'indicizzazione, avete qualche idea ?

kk3z
14-04-2011, 15:51
$letteracorrente = "";
$sottocartelle = $file->Apri_cartella(Dir);
foreach($sottocartelle as $cartella)
{
echo '<div class="lettera">';

$lettera = substr($cartella, 0,1);
if ($lettera != $letteracorrente)
{
printf("<b>%s</b><br>", strtoupper($lettera));
$letteracorrente = $lettera;
}

echo basename($cartella);
echo "<br>";
echo '</div>';
}

Nella funzione Apri_Cartella, non ha senso usare tutte quelle variabili della classe se poi non le usi in altri metodi della classe.

function Apri_Cartella($cartella)
{
$array_file = array();
if (is_dir($cartella))
{
if ($diropen = opendir($cartella))
{
while (($file = readdir($diropen)) !== false)
{
if($file != ".." && $file != ".")
$array_file[] = $file;
}
closedir($diropen);
}
}
asort($array_file);
return $array_file;
}

Ludo237
14-04-2011, 16:43
Per le variabili della classe : si le uso in altri metodi che non ho scritto perchè erano fuorvianti.

Ora provo la modifica che mi hai suggerito ;) :lamer: