Shopsystem ShopPilot

ShopPilot => SSP - Shop Server Pages => Thema gestartet von: mt am April 27, 2007, 10:15:59

Titel: Parameter an Funktion im Modul übergeben
Beitrag von: mt am April 27, 2007, 10:15:59
Moin Zusammen,

ich noch nicht so lange Erfahrung in Perl da ich vorher 5 Jahre ASP und PHP programmiert habe, daher habe ich vielleicht ne etwas "dümmere" Frage.

Ist es möglich Parameter an eine Funktion auszugeben?
Hier mal nen fiktives Beispiel:



Aufruf in den HTML-Vorlagen z.B.:

__text::textauslesen(testtextdatei.txt)__

Code im Modul (nur Auszug):

<!--spmacro:module(text)
sub textauslesen {
 
  # ....
  # Verwendung der Übergebenen Variable als $text_dat
  # genauere Idee habe ich da noch nicht
  # ...

  open (TEXTDAT,"$root/$shop_verz/$ordner_sprache/$datei_verz_texte/$text_dat") or die "Fehler beim öffnen der Datei\n$!";  # Datei oeffnen.
  # Schleife zum auslesen beginnen
  while (<TEXTDAT>)  {
    my $textinhalt = $_;  # Inhalt der Datei
    # Schleife zum Filtern von Sonderzeichen im Inhalt der Datei
    while (($suchen, $ersetzen) = each(%suchen_ersetzen)){
      $textinhalt =~ s/$suchen/$ersetzen/g;
    }
    main::mprint($textinhalt);
  }
  close (TEXTDAT) or die "Fehler beim schliessen der Datei\n$!"; # Datei schliessen
  return "noinc";
}
-->


Hoffe dafür gibt es ne Lösung, da ich sonst diese Funktion X-Mal (ca. 30) schreiben muss, da ich immer eine andere Datei habe.
Danke schonmal für die Antwort.


Gruß mt

Titel: Re: Parameter an Funktion im Modul übergeben
Beitrag von: cru am April 27, 2007, 11:53:30
Hallo mt,

das ist zur Zeit leider nicht mögich...

Sie könnten es jedoch mit folgendem Ansatz probieren:

Sie legen für jede Texdatei einen Identifier an:

__text::textauslesen1__
__text::textauslesen2__
__text::textauslesen3__
__text::textauslesen4__

usw.


Innerhalb der ssp Funktion können dann Parameter übergeben werden.
Sollte dann in etwa folgendermaßen aussehen:


<!--spmacro:module(text)
sub textauslesen1 {
      my $text =  lese_text("DieDatei1.txt");
      main::mprint $text;
      return "noinc";
}
sub textauslesen2 {
      my $text =  lese_text("DieDatei2.txt");
      main::mprint $text;
       return "noinc";
}
sub textauslesen3 {
      my $text =  lese_text("DieDatei3.txt");
      main::mprint $text;
       return "noinc";
}
.
.
.


usw....

Jetzt fehlt nur noch die Funktion lese_text, welcher der Parameter übergeben wird:



.
.
.
sub lese_text {
 
my $datei= shift;

  open (TEXTDAT,"$root/$shop_verz/$ordner_sprache/$datei_verz_texte/$datei") or die "Fehler beim öffnen der Datei\n$!";  # Datei oeffnen.
  # Schleife zum auslesen beginnen
  while (<TEXTDAT>)  {
    my $textinhalt = $_;  # Inhalt der Datei
    # Schleife zum Filtern von Sonderzeichen im Inhalt der Datei
    while (($suchen, $ersetzen) = each(%suchen_ersetzen)){
      $textinhalt =~ s/$suchen/$ersetzen/g;
    }
    return $textinhalt;
  }
  close (TEXTDAT) or die "Fehler beim schliessen der Datei\n$!"; # Datei schliessen

}
-->


Sie müssen also pro Textdatei und pro neuem Identifier nur einen neuen sub anlegen, welcher die Funktion lese_text mit Parameter aufruft.

Ist nicht getestet, sollte aber so funktionieren...

mfg
cru

Titel: Re: Parameter an Funktion im Modul übergeben
Beitrag von: mt am April 27, 2007, 12:06:00
Mmh, konnte ich mir leider schon denken.
Vielleicht kann man es ja irgendwann mal realisieren (später in Version 3 oder 4 ;)).

Trotzdem vielen Danke für die schnelle Hilfe, der Lösungsansatz ist interessant und würde schon das einbinden erleichtern.
Werde ich gleich testen.

mt
Titel: Re: Parameter an Funktion im Modul übergeben
Beitrag von: mt am April 27, 2007, 12:18:31
Hallo nochmal,

Nur mal als Feedback, habe das Script gerade eingebaut und es funzt super, ist erstmal echt eine Alternative.
Danke!

Gruß, mt