Hallo nochmal,
ich hab mein Gallery-Script von neulich nochmal überarbeitet und es funzt jetzt -größtenteils.
Zur Erinnerung: ich wollte auf der Galerie-Indexseite sechs Zufalls-Thumbnails anzeigen. Die Unterordner wo die zufällig auszuwählenden Thumbnails liegen sind durchlaufend numeriert, ebenso wie die jeweiligen Bilder. Thumbnails und Großbilder liegen immer im gleichen Ordner, wobei die Thumbnails gekennzeichnet sind durch Namen wie "20t.jpg" und die Großbilder mit sowas wie "20.jpg".
Das Script wählt in seiner jetzigen Form immer sechs verschiedene Thumbnails zufällig aus, wie gewünscht. Im praktischen Einsatz zeigt sich dabei aber, dass sehr oft die sechs Bilder nur als zwei oder drei verschiedenen Ordnern stammen, ideal wäre wenn jeder existierende Ordner nur einmal "angesteuert" wird. Das habe ich auch versucht in dem folgen Script zu berücksichtigen, aber irgendwie klappt dieses eine Detail trotzdem nicht. Hier erstmal der kommentierte Code:
Mir ist klar dass dies ein ziemliches Code-Monster ist und dass man vielleicht einiges optimieren könnte was redundant ist (bin halt Newbie, sorry!), aber hat nach Durchsicht dieses codes jemand ne Idee warum das zufällige Auswählen eines Ordners, der jedesmal ein anderer sein soll, nicht klappt?
vielen Dank, der Parse_error
ich hab mein Gallery-Script von neulich nochmal überarbeitet und es funzt jetzt -größtenteils.
Zur Erinnerung: ich wollte auf der Galerie-Indexseite sechs Zufalls-Thumbnails anzeigen. Die Unterordner wo die zufällig auszuwählenden Thumbnails liegen sind durchlaufend numeriert, ebenso wie die jeweiligen Bilder. Thumbnails und Großbilder liegen immer im gleichen Ordner, wobei die Thumbnails gekennzeichnet sind durch Namen wie "20t.jpg" und die Großbilder mit sowas wie "20.jpg".
Das Script wählt in seiner jetzigen Form immer sechs verschiedene Thumbnails zufällig aus, wie gewünscht. Im praktischen Einsatz zeigt sich dabei aber, dass sehr oft die sechs Bilder nur als zwei oder drei verschiedenen Ordnern stammen, ideal wäre wenn jeder existierende Ordner nur einmal "angesteuert" wird. Das habe ich auch versucht in dem folgen Script zu berücksichtigen, aber irgendwie klappt dieses eine Detail trotzdem nicht. Hier erstmal der kommentierte Code:
PHP-Code:
//Arrays bilden für die Zufallsbilder und Vergleiche
//zwischen ausgewählten Directories und Bildern um
//Doppelungen zu vermeiden
$bilder=array();
$directories=array();
$bilder2=array();
//Schleife initialisieren die sechs Zufallsbilder auswählt
$count=0;
for ($i=1; $i<=6; $i++)
{
//Zufälliges Auswählen eines Dateiordners;
//$dirs als Gesamtzahl der existierenden Ordner
//ist bereits bekannt durch ne MySQL-Query
mt_srand((double)microtime()*1000000);
$zahl= mt_rand(1, $dirs);
//Vergleichen ob der Ordner schon in einem
//vorherigen Schleifen-Durchlauf benutzt wurde;
//wenn nicht, einstellen der zufallszahl in ein Array
//Dies ist der Punkt im Script, der
//offenbar nicht funzt!!!
if(in_array($zahl, $directories) ==false)
{
array_push($directories, $zahl);
//Zählen der Thumbnails in dem zufällig
//ausgewählten Ordner
$verz=opendir ("$zahl");
while ($zaehlen = readdir ($verz))
{
if($zaehlen != "." && $zaehlen != "..")
{
//Thumbnails des Ordners werden mit ihrem Pfad in das Array
//"$bilder" gepusht
if (strstr($zaehlen, "t.jpg") == true)
{
$pfad= "$zahl/$zaehlen";
array_push($bilder, $pfad);
}
}
}
// Zufälliges Auswählen eines Thumbnail-
//Pfades aus dem Array "$bilder"
$count=count($bilder);
mt_srand((double)microtime()*1000000);
$zahlimg= mt_rand(0, $count);
$thumb=$bilder[$zahlimg];
$grossbild=str_replace("t.jpg", ".jpg", $thumb);
$imga=strstr($grossbild, "/");
$imgb=str_replace(".jpg", "", $imga);
$img=str_replace("/", "", $imgb);
$id=substr($thumb, 0, strpos($thumb, "/"));
//Vergleich ob das zufällig ausgewählte Thumbnail schon einmal
//ausgewählt wurde; wenn nicht, Ablegen im Array "$bilder""
if (in_array($thumb, $bilder2) == false
&& empty($thumb)==false &&file_exists("$grossbild") )
{
array_push($bilder2, $thumb);
//Ausgabe des ausgewählten Thumbnails falls noch nicht benutzt
echo"<tr><td bgcolor=\"#f0f8ff\" align=\"center\"
valign=\"middle\"><a hef=\"einzelbild.php?id=$id&img=$img\">
<img src=\"$thumb\" alt=\"Bild $img aus Galerie $id\"></a></td></tr>";
closedir("$zahl");
}
//Wurde das Bild schon einmal verwendet, muss die Schleife ein
//zusätzliches Mal durchlaufen werden:
else
{
$i--;
closedir($zahl);
}
}
else
//Diese Else-Bedingung soll sein für den Fall dass auch der
//Dateiordner (s.o.) schon einmal benutzt wurde. Falls ja,
//dann soll die Schleife nocheinmal durchlaufen werden
{
$i--;
}
}
vielen Dank, der Parse_error
Kommentar