Perl Bilderliste soll nicht an den Anfang springen

bitmuncher

Senior-Nerd
Ich erstelle gerade für meinen Dad eine Online-Version eines Briefmarkenkatalogs. Dieser enthält eine Bilderliste, in der man die Bilder anklicken kann und dann die gewünschten Daten für eine Briefmarke erhält. (Siehe Screenshot unter http://bitmuncher.blog.de/2010/11/20/wochenende-coden-angesagt-10012944/). Dummerweise springt aber nach jedem Laden eines Datensatzes die Liste wieder an den Anfang zurück. Sie soll aber an der Stelle bleiben, an der der User zuletzt war, wo also das angeklickte Thumbnail zu sehen ist. Hat jemand eine Idee, wie man das (am besten ohne Javascript) umsetzen kann? Der Code für die Liste sieht momentan so aus:

Code:
#!/usr/bin/perl

require "config.pl";
my %config = &config_data();

$out = "Content-Type: text/html\n\n";

$out .= '<html><head><META HTTP-EQUIV="Expires" CONTENT="86400"><base target="_parent"></head><body>'."\n";

my $thisdir = $config{'thumbnaildir'};
opendir(DH, $thisdir) || die "Cannot open $thisdir $!\n";;
my @files = readdir(DH);
$out .= "<table border=\"0\"><tr>\n";
foreach(@files) {
	unless($_ eq '.' || $_ eq '..') {
		my $number = '';
		if($_ =~ /DDR(.*)_small.jpg/) {
			$number = $1;
		}
		$out .= '<td><a href="index.pl?mod=info&nummer='.$number.'"><img src="'.$thisdir.$_.'"></img>'."</a></td>\n";	
	}
}
$out .= "</tr></table>\n";
closedir DH;

$out .= "\n</body></html>";

print $out;

1;

Angezeigt wird sie in einem iFrame, damit die horizontale Scrollleiste genutzt werden kann.
 
Hi,
das kannst du mit Ankern erreichen.
Du schreibst in der Bilderliste hinter jedes Bild einen Anker mit der jeweiligen Nummer:
Code:
...<img src="'.$thisdir.$_.'"></img><a name="bild'.$number.'"></a>
Und wenn du eine Detailansicht anzeigst, hängst du hinter das src-Attribut im IFrame den Ankername an die URL:
Code:
<iframe src="list.pl#bild'.$number.'">
Dann sollte der Browser das Frame so scrollen, das der angesprungene Anker sichtbar wird (du solltest den Anker daher rechts von den Bildern setzen, damit das angezeigte Bild auch sichtbar ist).

---
Ich hätte noch ne andere Idee, wie du das lösen kannst.
Wenn du statt einem IFrame gleich ein Frameset benutzt, in dem die Detailansicht auch in einem Frame geladen wird, könntest du mit dem Target-Attribut der Links in der Liste die Detailansicht im oberen Frame öffnen, ohne dass das untere Frame geändert wird.
Wenn du sowieso mit Frames arbeitest, kannst du das auch gleich so machen. Dann hast du kein Problem mehr, dass sich die Liste verstellen könnte.

mfg, metax.
 
Ich hab's mit den Ankern probiert, aber das funktioniert im Safari scheinbar nicht. Hab's daher jetzt deinem Rat folgend auf ein komplettes Frameset umgestellt. Damit geht's. Danke. :)
 
Hi,

Anker funktionieren super wenn man sie nicht auf name="ankername" setzt sondern auf Ids also <img scr="thumbnail.jpg" id="bild_1" /> und dann eben auch #bild_1 an den link .. macht safari auch ohne probleme mit :)
framesets sind doch ausserst unschön...
 
Krasse Sache, ich hab noch nie gehört, dass man so Elemente mit ner ID anspringen kann. Scheint aber einwandfrei zu funktionieren.
Danke für den Tip, das ist bestimmt nützlich!
 
Ich muss so oder so mindestens einen iFrame nutzen um die Bilderliste anders cachen zu können als den Datenbereich. Wenn bei jedem Klick >3200 Thumbnails geladen werden müssen, ist das genauso unschön. ;)
 
Zurück
Oben