Thread HTML ausgabe mit variable: bekomm das nicht hin (12 answers)
Opened by Gast at 2003-08-19 01:18

Dubu
 2003-08-19 01:48
#18 #18
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Erstmal etwas stilistisches:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ersetze 
while(<LISTE>)
 {
  push(@Zeilen,&#36_);
 }
# durch
@Zeilen = <LISTE>;

# ersetze 
foreach (@Zeilen)
{
print "&#36_";
}
# durch
print @Zeilen;


Dann zu deiner Frage: Ja, natuerlich geht das. Du hast nach dem Einlesen den HTML-Code ja wohl in @Zeilen, darin kannst du dann deine Ersetzungen vornehmen. Damit du nicht in jeder einzelnen Zeile ersetzen musst, waere es dafuer aber praktischer, alles nur in einem String zu haben.

Fuer ein einfaches Templatesystem muss man sich erstmal eine Markierung ausdenken, die im Template die Variablen auszeichnet und die nicht zufaellig auch so im Template vorkommt. Als Beispiel nehme ich hier mal "%%Irgendwas%%" fuer eine Variable mit Namen "Irgendwas". Im Programm speichert man die Variablen der Einfachheit halber in einem Hash, dessen Schluessel die Namen sind.
Hier ein kleiner Beispielcode dafuer:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my %TmplVariablen = (
    User  => "Niemand",
    Land  => "Takatukaland",
);

my &#36Text;
open (LISTE, "< &#36seite") or die "Datei &#36seite konnte nicht geoeffnet werden: &#36!";
{
    local &#36/;
    &#36Text = <LISTE>;
}
close LISTE;

# Hier werden die Variablen ersetzt
&#36Text =~ s/%%(\w+)%%/exists &#36TmplVariablen{&#361} ? &#36TmplVariablen{&#36_} : ""/eg;

print "Content-type: text/html\n\n";
print &#36Text;
(ungetestet)

Dabei wuerde jetzt der Text
Ich bin <b>%%User%%</b> und wohne in %%Land%%.
ersetzt durch
Ich bin <b>Niemand</b> und wohne in Takatukaland.


Fuer solche Templates gibt es aber schon sehr schoene Loesungen auf CPAN, wie z.B. CPAN:HTML::Template oder - richtig ausgefeilt - CPAN:HTML::Mason oder gar CPAN:HTML::Embperl.

View full thread HTML ausgabe mit variable: bekomm das nicht hin