#!/usr/bin/perl -w use strict; use CGI; use HTML::Template; my $cgi = new CGI; # Neue CGI-Objektinstanz my $gallery = HTML::Template->new(filename => $ENV{DOCUMENT_ROOT}.'/z_testdir/files/gallery.tpl'); # ^ Neue HTML::Template-Objektinstanz - der Pfad zur Template-Datei 'gallery.tpl' wird hier gleich mitgeteilt my $dirPath; my $picname; if (defined($cgi->param('path')) && $cgi->param('path') !~ /(php|html|txt)$/) { my @parts = split "/", $cgi->param('path'); # Pfad am "/" splitten. Dieser Pfad wurde als Parameter der URL drangehängt $picname = pop @parts if $parts[-1] =~ /gif|jpe?g|png/i; # Enthielt der Pfad einen Dateinamen, wird dieser hier $picname zugewiesen $dirPath = join "/", @parts; # Der reine Verzeichnispfad wird wieder zusammengebaut... $dirPath .= "/"; # und ein abschließendes "/" drangehängt } print $cgi->header(-charset => 'utf-8'); # HTTP-Header mit Angabe der Zeichencodierung. Bei Änderung der Codierung, die Template-Datei anpassen!!! opendir DIR, $ENV{DOCUMENT_ROOT}.$dirPath or die "Verzeichnis konnte nicht geöffnet werden, weil: $^E."; my @pics = grep(/\.jpg$/i, readdir DIR); # Verzeichnis einlesen, nur die .jpg-Dateien auflisten closedir DIR; @pics = map { $_->[0] } # Diese Schwartz'sche Transformation dient dazu, sort { $a->[1] <=> $b->[1] } # die Bilder alphanumerisch zu sortiern (wären sonst lexikalisch - oder: ASCIIbetisch)... map { [ $_, ( /(\d+)/ )[0] ] } @pics; # Ist eine Sortierung nicht notwendig, können diese drei Zeilen gelöscht werden. $picname = $pics[0] if !$picname; # Siehe if-Zweig weiter oben: Wenn kein Dateinamen im URL-Parameter existierte, wird hier $picname der Name des ersten Bilds zugewiesen my @tpl_loop; # Array für das HTML::Template-Loop wird deklariert foreach my $pic (@pics) { my $tnpart = substr($pic,0,-4); # Die Dateiendung wird entfernt, um den Dateinamen für die Thumbnails zusammen zu bauen # In diesem Beispiel befinden sich die Thumbnails im Unterverzeichnis 'th', der Dateiname ist DSCN1234-t.jpg # siehe drei Zeilen weiter unten: $line{'THPATH'} my %line; $line{'SCRIPT_URI'} = sprintf('%s?%s=%s', $ENV{SCRIPT_NAME}, 'path', $dirPath.$pic); # Siehe Template-Datei: Verlinkung der Thumbnails $line{'THPATH'} = $dirPath."th/".$tnpart."-t.jpg"; # Siehe Template-Datei: Pfad der Thumbnails für das img-Tag $line{'PICNAME'} = $pic; # Siehe Template-Datei: Pfad der Thumbnails für das img-Tag push (@tpl_loop, \%line); } $gallery->param(SCRIPT_URL => $ENV{SCRIPT_NAME}); $gallery->param(SCRIPT => 'Perl'); $gallery->param(THUMBS => \@tpl_loop); $gallery->param(DIRPATH => $dirPath); $gallery->param(PICNAME => $picname); print $gallery->output;