Galerie - Verzeichnisliste als Ziffern

Einen wunderschönen guten Morgen! :slight_smile:

Da meine PHP Kenntnisse sehr eingeschränkt sind und viele Versuche fehlgeschlagen sind wende ich mich vertrauensvoll mal an diese Community!

Folgende Grundlage:

Meine Seite umfasst ca. 800 Ordner mit Bildern als Inhalt.
Ordnerstruktur:

HAUPTORDNER
-ORDNER"1"
–UNTERORDNER"1"
1.jpg
2.jpg
3.jpg
–UNTERORDNER"2"
1.jpg
2.jpg
3.jpg
–UNTERORDNER"3"

–UNTERORDNER"800"

Wenn man auf der Indexseite die Galerie anklickt lädt diese den UNTERORDNER"1" und zeigt dessen Bilder in einer Tabelle an. Über den Bildern erscheint ein JS-Menu, wo alle UNTERORDNER, zum auswählen, aufgelistet sind!
Die 800 Ordner werden in der Galerie als “galerie.php$dir=1, galerie.php$dir=2,…$dir=800” zum verlinken ausgelesen.

Mein Problem:
Ich würde gerne das JS-Menu loswerden und hatte mich daran gesetzt eine HTML/PHP-datei zu erstellen, die mir die Ordner ausliest und in einer Liste ausgibt.
Man klickt also auf die Galerie und bevor es losgeht wird erst einmal eine Liste aller Ordner ausgegeben. Ich habe es aber bisher nicht geschafft die Ordner als Nummern zu deklarieren.
Die richtigen ORDNERNAMEN beginnen mit 0 bis 9, über A bis Z…
Der Ordner 0 sollte jetzt natürlich die “dir”-Nummer “1” bekommen und der letzte Ordner halt die “800”. Da ich immer wieder neue Ordner erstelle und die Reihenfolge der Ordner verändert wird, kann ich die Ordner leider nicht direkt einer Nummer zuweisen, sondern muss das irgendwie automatisch erzwingen.

Hatte glücklicherweise ein Skript entdeckt, was genau nach meinen Vorstellungen funktioniert, allerdings den ORDNERNAMEN dahintersetzt anstatt die Nummer
Bsp.: “galerie.php$dir=ORDNERNAME”

SKRIPT:

<?php $buchstabe_alt = ""; $verzeichnis = openDir("bilder/"); while ($file = readDir($verzeichnis)) { if ($file != "." && $file != "..") { $buchstabe = strtoupper(substr($file,0,1)); if ($buchstabe != $buchstabe_alt) { echo "   ".$buchstabe."  

"; $buchstabe_alt = $buchstabe; } echo "

"; } } closeDir($verzeichnis); ?>

Wenn sich jemand melden würde, der mir das erklären bzw. in irgendeiner art und weise helfen könnte wäre ich sehr erfreut darüber!

mit freundlichem Gruß
Mr. T.

$file[color=#BF0000](Und hier der richtige Name des Ordners)[/color]
function get_files($folder)
{
        $files=array();
        if($dir=opendir($folder))
        {
                while($file=readdir($dir))
                {
                        if (!is_dir($folder."/".$file))
                        {
                                $files[]=$file;
                        }
                        elseif($file != "." && $file != "..")
                                 $files[$file]=get_files($folder."/".$file);
                }
                closedir($dir);
        }
        ksort($files);
        return $files;
}

function print_folders($array)
{
    echo "<ul>";
    foreach($array as $key => $value)
    {
       if(is_array($value))
       {
          echo "<li>$key";
          print_folders($value);
          echo "</li>";
        }
         else
            echo "<li>$value</li>";
}
print_folders(get_files("images"));

Die Links usw. musst du dir noch einbauen…

Hi,

ich glaube, dich verstanden zu haben, auch wenn ich darin nicht viel Sinn sehe. Die Reihenfolge, in der die Einträge zurückgegeben werden, ist abhängig vom Betriebssystem und ich kann mir auch nicht vorstellen, was galerie.php mit der Ordnernummer will, aber nun gut. :wink:

Meinst du nicht eher „galerie.php?dir=ORDNERNUMMER“?

Wieviele Bilder hast du denn? Mit so vielen Unterordnern solltest du dir mal Gedanken über die Struktur deine Dateien machen. :whata:

Die Lösung ist mehr als simpel, einfach eine Schleifenvariable benutzen ($i = 0), die du bei jedem Durchlauf erhöhst ($i++).

[code]<?php
$buchstabe_alt = ‚‘;
$verzeichnis = opendir(‚bilder‘);
$i = 1;

while (($file = readdir($verzeichnis)) !== false)
{
if ($file != ‚.‘ && $file != ‚…‘)
{

$buchstabe = strtoupper($file[0]);
if ($buchstabe != $buchstabe_alt)
{
echo
"

  $buchstabe  

";

$buchstabe_alt = $buchstabe;
}

echo "

"; } } closedir($verzeichnis); ?>[/code] Zwei Stichwörter für dich: Einrückung, [url=http://validator.w3.org/](X)HTML[/url].
$file

Hey so schnell hatte ich garnicht mit antworten gerechnet.
Michi seine Antwort sieht gut aus, allerdings bin ich dafür noch nicht bereit…besser gesagt…ich komm nicht zurecht das in den bestehenden Code einzubauen. Habs versucht, aber ich krieg immer nur einen leeren link angezeigt. Danke für die Mühe mir zu helfen, aber es entstehen immer mehr fragen bei mir. da muss ich mich mal mit befassen, wenn ich php weiter erlernt habe. Vielen Dank!

[quote]Hi,

ich glaube, dich verstanden zu haben, auch wenn ich darin nicht viel Sinn sehe. Die Reihenfolge, in der die Einträge zurückgegeben werden, ist abhängig vom Betriebssystem und ich kann mir auch nicht vorstellen, was galerie.php mit der Ordnernummer will, aber nun gut.[/quote]

Das mit dem Betriebssystem kommt, glaube ich, gerade hier vor. Deine Lösung funktioniert irgendwie schon, allerdings sortiert er die Ordner sehr seltsam.
und er zeigt mir auch nur Ordner an, wenn ich das „!==false
aus[quote]
while (($file = readdir($verzeichnis) !== false)
{
if ($file != ‚…‘ && $file != ‚…‘)
{
[/quote]
lösche.
Er hat auf jeden Fall Probleme Ziffern in der richtigen reihenfolge auszugeben.
Auf meinem Rechner funktionierts, aber aufm Server sieht das schon ganz anders aus.
Der erste Ordner den man anklicken kann ist ein „.“ (galerie.php?dir=0). Liegt wahrscheinlich daran, dass mein richtiger erster Ordner „007“ heisst. und dann springt er plötzlich über zur „1“. Listet dort dann „1040“ auf und geht wieder zurück zur „0“ und zeigt den Ordner „069“.
Muss da erstmal hintersteigen. Kaffee is glaube ich der erste schritt zum erfolg :slight_smile:

Sind ca. 11 000. Aber es geht kaum anders mit der Struktur.

Ich überlege auch vielleicht erstma die Anfangsbuchstaben wegzulassen. Vielleicht erleichtert mir das etwas Überlegungskraft.

Aufgrund von Prüfungsvorbereitungen habe ich auch leider nicht die Zeit die ich bräuchte um mich da rein zu steigern. sehr schade, weil ich gerade darauf abfahre!

Ich denke, dass ich da noch eine ganze Weile dran sitzen werden. Kann zwar HTML und CSS (im mittleren Stadium), aber PHP is wie ne neue Freundin. Muss ich erstma kennenlernen und checken wie’s so funktioniert!

Danke für die ersten Denkanstöße…
Sehr nett die Unterstützung.

mfg

[quote=“tsifos”]while (($file = readdir($verzeichnis) !== false)
{
if ($file != ‘…’ && $file != ‘…’)
{[/quote]
Ja, da hatte ich einen Tippfehler (Klammer vergessen), ist editiert. :wink:

Damit kann ich gar nichts anfangen, wie sieht das Script denn in Aktion aus? Bzw. war das Script, das du gepostet hast, alles oder ist da noch mehr?

+1 :smiley:

Also das Script is im Prinzip alles. Die Galerie läuft ja dann separat. Brauch halt diese Liste um mein bestehendes Design nicht all zu groß zu verändern. Angucken kannste dir das hier:

http://www.thing.org/walllecker/crues.php

Allerdings ist es noch ohne verlinkung zur galerie. also nur die liste. Da kannste dann auch sehen, wie es mit der ganzen Sortierung nich hinhaut. Im Prinzip siehts ja ganz lustig aus, aber es verwirrt etwas… :slight_smile:
Ganz oben wie gesagt ist einfach der “.” als “dir=0” angegeben. Und danach kommen alle Ordner unsortiert heraus. es wundert mich aber, da bei mir aufm Rechner wirklich alles so ist, wie es sein sollte. Bis auf den verlinkten “.”!

mfg

Schon wieder mein Fehler. Wieder editiert. Ich bin irgendwie erst halb wach. >_>

Wie willst du die Dateien denn sortiert haben? Alphabetisch? Die Reihenfolge hängt übrigens vom Betriebssystem ab, d. h. wenn du nicht eine Linux-Distro benutzt, ist das kaum überraschend.

Das war das Problem mit dem
if ($file != ‘…’ && $file != ‘…’) ?!

Das hatte ich auch schon geändert. dabei ist mir aufgefallen, dass er dann den ersten Anfangsbuchstaben in einer der kleinsten Schriftgrößen darstellt die ich kenne.

Ja genau alphabetisch von A runter nach Z.
Das es vom Betriebssystem abhängt wundert mich, da ich eine Win-plattform habe und es richtig dargestellt wird. Der Server ist aber meiner Meinung nach auf Linux basierend. Dort besteht das Problem der Unsortiertheit.

sehr kompliziert nachzuvollziehen…
da kommt wahrscheinlich dann ein Problem, was man, so wie es aussieht, kaum einfach beheben kann.

Wobei ich auch die Reihenfolge auf dem Server nicht verstehe. Welches System er für die Sortierung verwendet, weil es ist ja wirklich “durcheinander”…

[code]<?php
$buchstabe_alt = ‘’;
$verzeichnis = scandir(‘bilder’);

foreach ($verzeichnis as $i => $file)
{
if ($file != ‘.’ && $file != ‘…’)
{

$buchstabe = strtoupper($file[0]);
if ($buchstabe != $buchstabe_alt)
{
echo
"

  $buchstabe  

";

$buchstabe_alt = $buchstabe;
}

echo "

"; } } ?>[/code] Verbraucht mehr Memory, aber sollte funktionieren. [url=http://php.net/function.scandir]scandir()[/url] sortiert alle Einträge, bevor sie sie zurückgibt.
$file

hui…
das wär genau das was ich bräuchte. Allerdings läuft der Server im Safe Mode und akzeptiert das scandir() nicht. irgendwie will jemand nicht, dass das funktioniert.
Du bist es auf jeden Fall nicht. ohne deine Hilfe wäre ich niemals so weit gekommen.
Werde mich da die nächsten Tage nochmal ransetzen und ausprobieren. Aber für heute muss ich passen. Fühle mich gerade wie heute morgen nach dem Aufstehen! :astonished:

vielen dank nochmal für die Hilfe und einen schönen Abend noch.
mfg

So da bin ich nochmal:

habe es mal anders probiert. Im Moment hänge ich aber leider an “$file”. Um es natürlich zu sortieren, muss file irgendwie ein array sein, aber da steig ich dann irgendwie nicht mehr durch. Würde mich über weitere Hilfe tierisch freuen.
Folgender Code:

<?php $adresse ="bilder/"; $verz=opendir($adresse); $files = array(); $i=0; while ($file = readdir ($verz)) { if($file != "." && $file != ".." && substr_count($file, ".") == 0) { $files[] = $file; } } closedir($verz); natsort($file); foreach($files as $i => $file) { echo ""; } ?>

Er listet mir zwar alle Ordner auf, auch mit der Richtigen dir-Nummer, aber oben drüber kommt immernoch eine Fehlermeldung folgender Art:

Warning: natsort() [function.natsort]: The argument should be an array in bilder.php on line 23

Diese Version funktioniert halt auf dem Server. Aber mit der Fehlermeldung oben drüber.

mfg

$file

Das Array, in dem die Dateien gespeichert werden, heißt doch $files und nicht $file. $file ist der aktuelle Dateiname und Strings kann man nicht sortieren. :wink:

Welchen Zweck erfüllt denn das? (Ja, ich weiß, was die Funktion macht)

Hey,
wenn ich aber $files ausgeben lasse, dann fügt er die Nummern nicht richtig an die Links an. Die ersten beiden Ordner sind dann dir=1 und dir=2, aber beim dritten macht er dann plötzlich mit dir=10 weiter.

Wenn ich natsort($file) anwende, dann nummeriert er die Links von 1-436 nacheinander aufsteigend. So sollte es im Endeffekt auch sein.

natsort() macht in dem Fall aber gar nichts, da die Funktion fehlschlägt.

hmm…
und da bin ich schon wieder am Ende angelangt.
Diese Sortierung der Nummern macht mich noch wahnsinnig.

ich glaube, da muss ich mal wieder das Handtuch werfen!

aber trotzdem danke für die kurze Erläuterung.

ALSO JETZT GEHTS RUND:

Die Sache funktioniert auf meinem Server doch!!! Ordner haben zwar unterschiedliche Nummern, aber die Links funktionieren. Man kommt in den Ordner, der auch in dem Link angezeigt wird.

Öhm, wenn das so ein Problem ist, dann benutze doch eine separate Variable für die Nummer.

[code]<?php

$adresse =“bilder/”;
$verz=opendir($adresse);
$files = array();
$i = 1;

while ($file = readdir ($verz))
{
if($file != “.” && $file != “…” && substr_count($file, “.”) == 0)
{
$files[] = $file;
}

}
closedir($verz);
#natsort($file);

foreach($files as $file)
{

echo "

"; } ?>[/code] Ich habe das natsort() mal auskommentiert, kannst du ja wieder rückgängig machen. Was wolltest du eigentlich mit natsort()? Wenn es um alphabetische Sortierung geht, dafür gibt es ja schon sort().
$file

Ich war leider nicht schnell genug, aber anscheinend funktioniert der Code doch.

keine Ahnung warum, aber es funktioniert…da muss ich nochma deftig drüber nachdenken!