Iterierung durch Ordnerstruktur verändern

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tklustig

Erfahrenes Mitglied
Hallo Leute, folgender Code iteriert durch ein OrdnerArray und stellt alle Ordner, Unterordner und Dateien dar. Soweit klappt das. Ich möchte es aber so haben, dass die einzelnen Dateien erst dann angezeigt werden, wenn ich auf den Ordnernamen(alternativ auf ein Icon neben dem Ordner) klicke. Ich fürchte, da kommt JavaScript ins Spiel, deswegen meine Frage. Für jeden Beitrag vorab vielen Dank! Zunächst der Screenshot, dann der bisherige Code!
public function folderContent(array $folder): string { $content = ''; foreach (scandir($folder) as $file) { // don't show hidden files if ($file[0] != '.') { if (is_dir($folder . '/' . $file)) { $folderArray[] = $file; } else { $fileArray[] = $file; } } } // first initialize folders/subfolders if (isset($folderArray)) { foreach ($folderArray as $row) { $content .= '<b>' . $row . '</b><br />'; // Unterordner nach rechts einrücken $content .= '<div style="padding-left:10px;color:rgb(175,175,175);" />'; // Rekursive Funktion $content .= $this->folderContent($folder . '/' . $row); $content .= '</div>'; } } // ...then all files inside folders/subfolders if (isset($fileArray)) { foreach ($fileArray as $row) { // Dateien verlinken $content .= '<a href="' . $folder . '/' . $row . '">' . $row . '</a><br />'; } } return $content; }
 

Anhänge

  • folder.png
    folder.png
    17,6 KB · Aufrufe: 5
Zuletzt bearbeitet:
Ich fürchte, da kommt JavaScript ins Spiel,
Nicht unbedingt. Du kannst zum Beispiel mit <details> arbeiten.

So in etwa:
HTML:
<ul>
    <li>1</li>
    <li>
        <details>
            <summary>2</summary>
            <ul>
                <li>
                    <details>
                        <summary>2.1</summary>
                        <ul>
                            <li>2.1.1</li>
                        </ul>
                    </details>
                </li>
                <li>2.2</li>
            </ul>
        </details>
    </li>
    <li>3</li>
    <li>4</li>
    <li>
        <details>
            <summary>5</summary>
            <ul>
                <li>5.1</li>
                <li>5.2</li>
                <li>5.3</li>
            </ul>
        </details>
    </li>
</ul>
 
Super Tipp. Vielen Dank für. Ist zwar nicht ganz so, wie ich es wollte, kommt aber nahe ran, ganz ohne Java Script:)
Hier nochmals der gesamte Code für alle, die ihn sonst noch benötigen
public function folderContent($folder): string { $content = ''; foreach (scandir($folder) as $file) { // don't show hidden files if ($file[0] != '.') { if (is_dir($folder . '/' . $file)) { $folderArray[] = $file; } else { $fileArray[] = $file; } } } // first initialize folders/subfolders if (isset($folderArray)) { foreach ($folderArray as $row) { $content .= '<b>' . $row . '</b><details><summary>SubFolder</summary><br />'; // Unterordner nach rechts einrücken $content .= '<div style="padding-left:10px;color:rgb(175,175,175);" />'; // Rekursive Funktion $content .= $this->folderContent($folder . '/' . $row); $content .= '</details></div>'; } } // ...then all files inside folders/subfolders if (isset($fileArray)) { foreach ($fileArray as $row) { // Dateien verlinken $content .= '<a href="' . $folder . '/' . $row . '">' . $row . '</a><br />'; } $content .= ''; } return $content; }

Aufruf:
PHP:
echo $this->folderContent(getcwd());
 

Anhänge

  • folder.png
    folder.png
    9,2 KB · Aufrufe: 8
Zuletzt bearbeitet:
Bei dem <details> Element ist das so, dass sich innerhalb das <summary> Element befindet. Dieses, stellt den Teil dar, der sichtbar bleibt, egal ob das <details> open ist oder nicht. Wenn dieses fehlt, setzt der Browser ein "virtuelles" <summary> mit dem Text "Details" ein.
(Das sieht man auf deinem Screenshot in #3)

Du musst den Namen des Ordners in <summary> schreiben. Alles was sichtbar sein soll, wenn das <details> den Status open hat, muss sich im <summary> aber außerhalb vom <details> befinden.

Edit: Sieht so aus, als ob du das schon selber herausgefunden hast. (Bitte editier deine Beiträge nicht komplett, sonst ist die Historie verloren)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge

Zurück