#!/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;