As Guido Flohr wrote:
> Kurzfristig würde ich allerdings das Meta::Info im Site-Active einfach
> selber lesen. Wenn du einen URL relativ zum Document-Root hast, dann
> geht das in etwa so:
>
> use site_lowlevel qw (%SYSTEM_CONF);
> use Lib::File qw (read_binary_file);
> use Meta::Hash qw (unserialize_meta);
^^^^^^^^^ das muss Lib::Hash qw (unserialize_meta) heissen.
>
> # Das holst du in der Realität natürlich aus deiner
> # Trefferliste.
>
> Ich hoffe, ich habe keine Syntax-Fehler da drin, ist jetzt einfach
> so runtergeschrieben.
Bis auf die kleine Korrektur mit dem Lib::Hash geht es erstmal,
zumindest syntaktisch, denn der Dumper gibt mir für alle Files
nur das aus:
$VAR1 = bless( {
'__meta' => {}
}, 'Meta::Info' );
Aha, weil ich auf die HTML-Files und nicht auf die Metadaten zugreife. In
@FILELIST steht der komplette absolute Pfad zum *HTML-File* drin.
Hier die vollständige, etwas geänderte Version, die bei mir jetzt
funktioniert:
<IMPERIA lang=perl>
use site_lowlevel qw (%SYSTEM_CONF);
use Lib::File qw (read_binary_file);
use Lib::Hash qw (unserialize_meta);
use Data::Dumper;
my $such_verzeichnis = "/";
clearlist();
clearlimit();
filemask("\\.shtml\$");
ireaddir($such_verzeichnis);
my $document_root = $SYSTEM_CONF{'DOCUMENT-ROOT'};
my $site_meta_dir = $SYSTEM_CONF{'SITE-DIR'} . '/meta';
foreach my $full_html_file_name (@FILELIST) {
# Dateinamen in site/meta zusammenbasteln.
my $url = $full_html_file_name;
# DOCUMENT-ROOT vorne abschneiden, dann haben wir den URL
$url =~ s|^$document_root||o; # Geht das vielleicht beser?
my $full_meta_file_name = $site_meta_dir . $url;
# ireaddir() findet alle Dateien in DOCUMENT-ROOT, auch die, die
# keine Metainfos haben. Daher hier der Test auf das Metainfo File
if (-r $full_meta_file_name) {
# Und - Lib::File sei dank - in einem Rutsch öffnen,
# flocken, lesen, schließen.
my $file_content = read_binary_file $full_meta_file_name or
die "cannot read $full_meta_file_name: $!";
# Bei zerschossenen Dateien fliegt man aus unserialize_meta()
# mit die() raus, also evtl. in eval() packen, wenn das
# wichtig ist. Dann würde ich aber eher diese komplette
# Routine in ein eval() packen, damit man bei jedem Fehler
# mit die() raus kann.
my $metainfo = unserialize_meta $file_content;
print "<pre>";
print "$url: " . Dumper($metainfo);
print "</pre>\n";
}
}
</IMPERIA>
--
Mirko Kaffka
interface:projects GmbH
Tolkewitzer Str. 49
01277 DRESDEN
| Thread (I6: Zugriff auf Arrays mit Perl in site_active-Templates) |
|
© 2001, 2002 marchive.pl Christian Lackas
[HOME]
[MARCHIVE]
[INDEX]
[IMPERIA]
[IMPRESSUM]
[DELTA]