Arrayabfrage in Bildergalerie überspringt zweites Bild

Gesperrt
TripleM
Beiträge: 42
Registriert: Sa 5. Mär 2005, 12:13
Kontaktdaten:

Arrayabfrage in Bildergalerie überspringt zweites Bild

Beitrag von TripleM »

Hallöchen, vielleicht kann mir hier ja jemand weiterhelfen. Folgendes Problem: ich gebe mit folgendem Code einen array (ist ein Bruchstück eines Contenido-Galerie-Moduls (c) by LGW, 2002, gemischt mit eigenem Code) durch, in den lauter Grafikdateinamen aus einem Ordner eingelesen werden:
Code:

Code: Alles auswählen

... 
sort ($filearray); 
for ($n=0;$n=$mmstart;$n++) 
$ffile=each($filearray); 
$n=0; 
while ($ffile=each($filearray)) 
{ $file=$ffile[value]; 
if ($filearray[0]==$file)
 { $prefile=""; 
$thisfile=$file; 
$forthfile=next($filearray); 
$nextfile=prev($filearray); 
} 
else 
{ $prefile=prev($filearray); 
$thisfile=next($filearray); 
$nextfile=next($filearray); 
$backfile=prev($filearray); 
}; 
...
Sinn dieser ganzen Vor-und Zurückspringerei soll es sein, zu dem jeweils angezeigten Bild ($thisfile) eine Vorschau des vorherigen ($prefile) und des nachfolgenden Bildes ($nextfile) als Vor-und Zurücklink anzuzeigen. Das klappt auch prima bis auf eine Ausnahme: irgendwie wird immer genau das zweite Bild im Array übersprungen und bei mir hängts mit der Logik.

Zur Erklärung: die Abfrage des ersten Arrayelementes (filearray [0]) behandle ich deshalb gesondert, weil es da ja noch kein $prefile gibt und sich das Ganze sonst unendlich aufhängen würde. Aber irgendwie stimmt es hier nicht: denn ich denke eigentlich müßte nach $thisfile (momentanes Bild) doch einfach $nextfile das nachfolgende Arrayelement sein - funktioniert aber nur korrekt in der Anzeige, wenn ich eines vor- und dann wieder eines zurückspringe - für mich eigentlich unlogisch.

So, und dann zeigt es zwar beim ersten Bild den Link zum zweiten richtig an, aber der Link führt ins Nirgendwo. Auch wenn ich direkt auf das zweite Bild in der Galerie klicke sehe ich rein gar nichts. Ab Bild drei funktioniert dann die Anzeige zum Bild zwei, aber auch hier der Link zurück nicht. Ab Bild vier klappt dann alles genau so wie ich es haben will: funktionierender Link mit Bild zum "Bild davor" und "Bild danach".

Also muß irgendwo der Haken sein, daß in meiner wirren Vor- und zurückhüpferei das zweite Element übergangen wird. Aber wie und warum? Kann mir da jemand helfen?

PS, KÜR: beim allerletzten Arrayelement wird zwar das aktuelle Bild, aber weder ein "Bild davor" und "Bild danach" noch der Link dazu angezeigt. Habe zwar auch hier allerhand Spezialfälle versucht zu behandeln, aber irgendwie stieß ich auf Granit. Wenn jemand was weiß... ist aber nicht so wichtig wie das Problem mit dem komplett übersprungenen Bild![/code]
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm jetzt mal blöd gefragt (ganz klar ist mir die funktionsweise des code snippets nicht)
die aktuelle position des array zeigers wäre ja

$thisfile=current($filearray);

und nicht

$thisfile=next($filearray);

oder ?

auf der anderen seite

next($filearray)
prev($filearray)

wenn kein nächstes oder vorhergehendes element im array vorhanden ist wäre das ergebniss false...

du brauchst somit eigentlich ja nur prüfen ob der zugewiesene wert nicht false ist... und dann entsprechend anzeigen...
*** make your own tools (wishlist :: thx)
TripleM
Beiträge: 42
Registriert: Sa 5. Mär 2005, 12:13
Kontaktdaten:

Unlogisch finde ich das auch, aber ich hab's gelöst...

Beitrag von TripleM »

Ich kann Deine Einwände verstehen, vonwegen fehlender Logik, ganz genauso ging es mir ja auch.

Also daß $thisfile=next($filearray); liegt daran, daß man ja vorher das prev($filearray) abfragt und dafür vom aktuellen Arrayelement eines zurück springt, dann erst wieder auf das aktuelle und dann auf das folgende.

Aber mit den vielen Vors- und Zurücks ergibt das für mich auch keinen Sinn, habe einfach wild rumprobiert: und habe inzwischen eine Lösung gefunden:

Code: Alles auswählen

if ($filearray[0]==$file) 
{
$prefile="";
$thisfile=$file;
$backfile=prev($filearray);
$nextfile=next($filearray);

}
else if ($filearray[$number]==$file) 
{
$backfile=prev($filearray);
$prefile=prev($filearray);
$thisfile=$file;
$nextfile=next($filearray);
$forthfile=next($filearray);
}
else
{
$backfile=prev($filearray);
$prefile=prev($filearray);
$thisfile=next($filearray);
$nextfile=next($filearray);
};
Mir ist klar, daß es eigentlich total sinnlos ist, zum Beispiel vom momentanten Arrayelement aus zweimal zurückzuspringen (siehe zweite Bedingung: "$backfile=prev($filearray);
$prefile=prev($filearray);") um zum vorigen Element zu kommen, aber nach stundenlangem wilden Rumprobieren hat es so funktioniert.

Danke für Deinen Versuch es zu knacken! Cheerio
Gesperrt