Hallo Leute,
schreibe gerade an einer
ISAPI Extension für den IIS (Srv. 08/12). Soweit so gut, alles funktioniert wie es soll, nun will der Kunde natürlich
seine eigene Templates verwenden. Ok, Templates mit Tags bestückt (<#MeinTag>) und den TPageProducer (PP) für die Verarbeitung vorbereitet.
Das haut auch bestens hin, bis mir beim debuggen auffiel, dass der PP im OnHTMLTag die Tags zweimal ersetzt und das ist sehr, sehr schlecht.
Ich verwende mit unter ein "Data Modul" das verschiedene Werte verarbeitet und im OnHTMLTag des PP die Werte den Tags zuweist.
Hier mal etwas BeispielCode:
Delphi-Quellcode:
procedure TWebModuleMain.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: string; TagParams: TStrings; var ReplaceText: string);
var
dm: TDataModuleHtml;
begin
dm := TDataModuleHtml.Create(nil);
try
if SameText(TagString, 'TAG_1') then
ReplaceText := dm.GetBlaBla1
else if SameText(TagString, 'TAG_2') then
ReplaceText := dm.GetBlaBla2
// Usw...
else
ReplaceText := '';
finally
dm.Free;
end;
end;
end.
procedure TWebModuleMain.WebModuleMainDefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
PP.HTMLFile := Request.TranslateURI('/templates/template1.html');
Response.Content := PP.Content;
end;
Also wenn OnHTMLTag aufgerufen wird dann passiert folgendes:
1. DataModule (dm) wird erstellt
2. Er findet den ersten Tag und ersetzt diesen mit dem Wert der function dm.GetBlaBla1
3. Springt ins finally
4. Erstellt DM
5. Findet den zweiten Tag und ersetzt diesen mit dem Wert der func. dm.GetBlaBla2
6. Springt ins finally
Nun sind alle Tags ersetzt und das wars dachte ich, doch dann fängt alles von vorne an.
Nachdem der zweite Durchlauf beendet ist, spuckt er die Seite aus.
Wenn ich nun in den Tamplates nur eine einzige Tag-Stelle setze, dann macht der PP das richtig.
Damit meine ich, der Tag wird ersetzt und der PP geht aus der Methode raus und Ende.
Das Problem hierbei ist, das die function dm.GetBlaBla1 aus dem DataModule z.B. Werte von einem anderen
Server abfragt und die function dm.GetBlaBla1 womöglich auch. Im Umkehrschluss bedeutet das,
um so mehr Tags ich im Template habe um so mehr Fremd-Serveraufrufe ich damit produziere.
Wie kann ich das abstellen?
Mache ich bei der Verwendung des TPageProducer generell einen Fehler?
Ist diese Komponente dafür gedacht oder nur für
PP.ReplaceText := 'Hallo ' +Request.ContentFields.Values['FirstName'] + ', Guten Tag'
?
Danke
Alexander