Ankündigung

Einklappen
Keine Ankündigung bisher.

verzeichnis auslesen und letzten Ordner als Menüpunkt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verzeichnis auslesen und letzten Ordner als Menüpunkt

    Hallo,

    ich versuche Ordner so auszulesen, dass man sie zum einen aufklappen kann und zum anderen, dass der letzte Ordner als Menü verwendet wird.
    Das heißt wenn man einen Ordnerzweig ganz aufgeklappt hat soll der letzte angezeigte Ordner als Link verwendet werden.

    Bisher habe ich es nur geschafft, das Verzeichnis so auszulesen, dass auch alle Dateien angezeigt werden und der Baum komplett ausgeklappt ist.

    So sieht das aus bisher:

    PHP-Code:
    function recurse_directory($path=".")
        {
        global 
    $DOCUMENT_ROOT$HTTP_HOST;
        if (empty(
    $path)) {$path $DOCUMENT_ROOT;}
        if(!
    is_dir($path))
        {
        return 
    FALSE;
        }
    $dir opendir($path);
    echo 
    "<ul>";
    while (
    $file readdir($dir))
        {
        if (
    $file != "." && $file != "..")
            {
            if (
    is_dir($path "/" .$file))
                {
                echo 
    "<li><b>$file</b></li>";
                
    recurse_directory($path "/" $file$base_url$path);
                }
            else
                {
                
    $url "http:$HTTP_HOST/$path/$file";
                
    $url str_replace("$DOCUMENT_ROOT"""$url);
                echo 
    "<li> <a href= \"$url\">$file</a>$url</li>";
                }
            }
    }
    echo 
    "</ul>";
    }
    recurse_directory(); 

  • #2
    Du musst eben feststellen, welches der letzte Ordner ist. In der while-Schleife kannst du das nicht feststellen, da readdir/opendir gewissermassen Streams sind, das heißt nicht prüfbar ist, ob man sich im nächsten Durchlauf am Ende befindet. Speicher doch erstmal alle Ordner in einen Array und spalte die Ausgabe dann in eine extra Funktion. Dort kannst du mit count() einfach feststellen, welches das letzte Element ist.

    Kommentar


    • #3
      oder einfach mit [MAN]end[/MAN] ()

      Kommentar


      • #4
        Zitat von nikosch Beitrag anzeigen
        oder einfach mit [MAN]end[/MAN] ()
        Geht das?
        Ist opendir/readdir eine Iteration oder ein Stream?
        Bin mir grade selbst nicht mehr sicher ..

        Kommentar


        • #5
          Zitat von Chriz Beitrag anzeigen
          Geht das?
          Ist opendir/readdir eine Iteration oder ein Stream?
          Bin mir grade selbst nicht mehr sicher ..
          Wie soll das denn gehen? Selbst wenn end() das akzeptiert, mit end() setzt du ja den internen Zeiger aufs Ende, also zum Vergleichen ob man am Ende ist bräuchte man dann ja irgendwie ne Kopie, sonst überspringt man ja die vorherigen Ordner und die will er ja auch ausgeben. Außerdem muss das Ende ja kein Ordner sein...

          Kommentar


          • #6
            Wenn es geht kannst du doch mit current() == end() prüfen ob du am Ende bist. Wie gesagt bin mir nicht sicher ob es ein Stream oder eine Iteration ist. Ist sicher schnell getestet. Man bricht sich aber sicher kein Bein wenn man das ganze in zwei Schleifen durchläuft.

            Kommentar


            • #7
              Ich versteh deine Aussage nicht. Wenn ich end() benutze geht mir doch die aktuelle Position flöten, weil

              Zitat von http://de.php.net/end
              end() rückt den internen Zeiger von array bis zum letzten Element vor, und gibt dessen Wert zurück.

              Kommentar


              • #8
                Stimmt.

                Kommentar


                • #9
                  Dort kannst du mit count() einfach feststellen, welches das letzte Element ist.
                  oder einfach mit end ()

                  Kommentar


                  • #10
                    Was trotzdem eine Array-Kopie benötigt, im Gegensatz zu count()

                    Kommentar


                    • #11
                      Was für ne Kopie ??

                      Kommentar


                      • #12
                        Na für das angesporchene current() == end()

                        Oder man muss sich die aktuelle Position merken und darauf zurück springen oder das Ende vor der Schleife auslesen, zwischenspeichern und reset(). Siehe #7

                        Kommentar


                        • #13
                          Ach egal jetzt. Ich würde ohnehin was anderes empfehlen (Ihmo meint der TE gar nicht den letzten Eintrag, sondern sozusagen die jeweiligen Blätter im Strukturbaum (also die Dateien bzw. Ordner ohne weitere Unterstrukturen)). Deshalb: Ordner rekursiv durchlaufen und direkt verarbeiten (is_file) oder verschachteltes Array erstellen und Einträge, die keine Arrays sind, anders behandeln.

                          Da Du an sich aber schon so weit bist, stelle ich jetzt mal die Frage nach dem konkreten Problem bei der Umsetzung. Also: Wie lautet Deine Frage? Wie das auch mit leeren Ordnern funktioniert oder wie?

                          Kommentar


                          • #14
                            Leere Ordner brauchen garnicht angezeigt zu werden..
                            Aber irgendwie krieg ich das nicht so wirklich hin.

                            Kommentar


                            • #15
                              Kannst Dus noch mal kurz und prägnant umreißen?
                              Directory rekursiv listen, Struktur in einem Aufklappmenü abbilden, Dateien als Links, leere Ordner ignorieren. So?

                              Kommentar

                              Lädt...
                              X