Avatar billede ttopholm Nybegynder
25. februar 2005 - 13:45 Der er 21 kommentarer og
1 løsning

funktion der viser alle mapper

Kan man i PHP lave en funktion der kan fra en rodmappe, går ned gennem alle mapper og vise dem. Og hvis ja, hvordan
Avatar billede detox Nybegynder
25. februar 2005 - 14:19 #1
<?
$mappe = ".";
taelMapper($mappe);

function taelMapper($dir) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                echo "$file<br />";
                taelMapper("$dir/$file");
            }       
        }
    }
    $d->close();
}
?>
Avatar billede detox Nybegynder
25. februar 2005 - 14:20 #2
PS: funktionen burde nok hedde visMapper ;o)
Avatar billede jakoba Nybegynder
25. februar 2005 - 14:22 #3
function vis_alle_mapper ( $sti, $level ) {
    if ( is_dir( $sti ) ) {
        if ( $dp = opendir( $sti ) ) {
            $filliste = array();
            while ( ($file = readdir($dp)) !== false ) {
                if ( $file != '.' && $file != '..' ) {
                $filliste[] = $file;
                }
            }
            closedir($dh);

                // nu ligger alle fil og mappenavne i arrayet $filliste
                // du kan evt sortere den alfabetisk eller efter extension, ...

            foreach( $filliste as $file ) {
                echo str_pad( "", 4*$level , "&nbsp; ") .$file;
                if( is_dir( $sti ."/" .$file ) {
                    vis_alle_mapper ( $sti ."/" .$file, $level+1 )
                }
            }
        } 
    }
}

mvh JakobA
Avatar billede jakoba Nybegynder
25. februar 2005 - 14:25 #4
der bør no være et linieskift efter hver linie:
                echo str_pad( "", 4*$level , "&nbsp; ") .$file ,"<br>\n";
Avatar billede ttopholm Nybegynder
25. februar 2005 - 14:37 #5
Den skal bare smide det en i dropdown

sådan her:

xxx
xxx/aaa
xxx/aaa/bbb
ccc
ddd/eee

hvis i kan følge mig....
Avatar billede detox Nybegynder
25. februar 2005 - 14:59 #6
Fx:

$mappe = ".";
echo "<select name='mappe'>" . visMapper($mappe) . "</select>";

function visMapper($dir) {
    global $out;
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out .= "<option value='$dir/$file'>$dir/$file</option>";
                visMapper("$dir/$file");
            }       
        }
    }
    $d->close();
    return $out;
}
Avatar billede detox Nybegynder
25. februar 2005 - 15:00 #7
Bare ikke brug variablen: $out til andet.
Avatar billede jakoba Nybegynder
25. februar 2005 - 15:11 #8
var det ikke nemmere Og sikrere) at lave $out lokal i funktionen:

function visMapper($dir) {
    $out = "";
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out .= "<option value='$dir/$file'>$dir/$file</option>"
                      . visMapper("$dir/$file");
            }     
        }
    }
    $d->close();
    return $out;
}
Avatar billede detox Nybegynder
25. februar 2005 - 15:22 #9
jakoba -> Jo, den er at foretrække. Er skrevet bag øret :O)
Avatar billede ttopholm Nybegynder
25. februar 2005 - 15:27 #10
hvis jeg så vil have det på skærmen skriver jeg bare

printf visMapper("/home/test/") eller hvad
Avatar billede jakoba Nybegynder
25. februar 2005 - 15:35 #11
uden / tilsidst, bare:
  printf visMapper("/home/test");          // eller hvad
Avatar billede detox Nybegynder
25. februar 2005 - 15:39 #12
Så skal du nok bruge en af de første funktioner der blev foreslået. De sidste to laver jo dropdown lister.
Avatar billede ttopholm Nybegynder
25. februar 2005 - 16:16 #13
jeg vil bare have dropdown udskrevet.... Hvad skal jeg skrive for at få den ud...
Avatar billede detox Nybegynder
25. februar 2005 - 16:21 #14
Altså selve koden:

<?
$mappe = ".";
echo nl2br(htmlentities("<select name='mappe'>\n" . visMapper($mappe) . "</select>\n"));

function visMapper($dir) {
    $out = '';
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out .= "<option value='$dir/$file'>$dir/$file</option>\n"
                . visMapper("$dir/$file");
            }       
        }
    }
    $d->close();
    return $out;
}
?>
Avatar billede ttopholm Nybegynder
25. februar 2005 - 16:25 #15
den smider det ikke en dropdown men giver mig:

<select name='mappe'>
<option value='./minigal'>./minigal</option>
<option value='./minigal/styles'>./minigal/styles</option>
<option value='./minigal/styles/blackborder'>./minigal/styles/blackborder</option>
Avatar billede ttopholm Nybegynder
25. februar 2005 - 16:33 #16
løste den ved at fjerne htmlentities

Takker for hjælpen er det ikke fair hvis i deler eller hvad
Avatar billede ttopholm Nybegynder
25. februar 2005 - 16:45 #17
hvordan sortere jeg det alfabetisk.....
Avatar billede detox Nybegynder
25. februar 2005 - 17:10 #18
Så skal det laves noget anderledes:

<?
$mappe = ".";
$select = "<select name='mapper'>\n";
$liste = visMapper($mappe);
natsort($liste);
foreach ($liste as $sti) {
    $select .= "<option value='$sti'>$sti</option>\n";
}
$select .= "</select>\n";
echo $select;

function visMapper($dir, &$out=array()) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out[] = "$dir/$file";
                visMapper("$dir/$file", $out);
            }       
        }
    }
    $d->close();
    return $out;
}
?>
Avatar billede ttopholm Nybegynder
25. februar 2005 - 17:21 #19
får en fejl her:

function visMapper($dir, &$out=array())

{Parse error: parse error, unexpected T_IS_EQUAL, expecting ')'
Avatar billede detox Nybegynder
25. februar 2005 - 17:31 #20
Arh, det er først muligt at sætte en reference variabel som default. Så ved jeg ikke lige om man kan undgå en global, så igen undgå at bruge $out i scriptet;

<?
$mappe = ".";
$select = "<select name='mapper'>\n";
$out = array();
$liste = visMapper($mappe);
natsort($liste);
foreach ($liste as $sti) {
    $select .= "<option value='$sti'>$sti</option>\n";
}
$select .= "</select>\n";
echo $select;

function visMapper($dir) {
    global $out;
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out[] = "$dir/$file";
                visMapper("$dir/$file");
            }       
        }
    }
    $d->close();
    return $out;
}
?>
Avatar billede detox Nybegynder
25. februar 2005 - 17:31 #21
Ups:
Arh, det er først muligt at sætte en reference variabel som default i php version > 5.0.
Avatar billede detox Nybegynder
25. februar 2005 - 17:38 #22
Dette er osse en mulighed:

<?
$mappe = ".";
$select = "<select name='mapper'>\n";
$liste = array();
visMapper($mappe, $liste);
natsort($liste);
foreach ($liste as $sti) {
    $select .= "<option value='$sti'>$sti</option>\n";
}
$select .= "</select>\n";
echo $select;

function visMapper($dir, &$out) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out[] = "$dir/$file";
                visMapper("$dir/$file", $out);
            }       
        }
    }
    $d->close();
}
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester