From:Mirko Kaffka
Date:14.1.03 10:03
Subject:Re: I6: Zugriff auf Arrays mit Perl in site_active-Templates
Reply-To:<imperia-users@imperia.de>
References:
  • 13.1.03 15:39 Mirko Kaffka
    [IMPERIA] I6: Zugriff auf Arrays mit Perl in site_active-Templates
  • 13.1.03 16:55 Guido Flohr
    Re: [IMPERIA] I6: Zugriff auf Arrays mit Perl in site_active-Templates
  • 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]