Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#4

Re: Webinterface, HTML Inhalt dynamisch erzeugen

  Alt 17. Jul 2008, 14:11
Hallo,

zum dynamischen Generieren von HTML-Seiten bietet sich TPageProducer an.
Dem kannst Du ein HTML-Template unterschieben, in Form einer Datei.

Mit einem TDataSetTableProducer kannst Du die Ergebnisse einer SQL-Abfrage (TQuery) oder einer Tabelle (TTable) bzw. allen Nachkommen von TDataSet aufbereiten lassen.

Beispiel für eine HTML-Datei:

Delphi-Quellcode:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="expires" content="0">
<meta name="robots" content="index">
<meta name="robots" content="follow">
<title>Das ist der Seitentitel</title>
<link rel="stylesheet" type="text/css" href="/stylesheets/neutral.css">
</head>
<body>
<div id="navigation">
<h1 class="center">EDV-Spezialadressen</h1>
<h2 class="center">Übersicht über Firmen einer Branche</h2><hr />
<#CONTENT>
<hr />
</div>
</body>
</html>
Beispiel für den Quelltext in Delphi, der den Inhalt in die Datei einfügt:

Delphi-Quellcode:
// Aufbau der Indexseite
// mit ersetzen der ggfls. im Template enthaltenen Platzhalter.
procedure Twm.ppIndexHTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
  // An die Stelle dieses Platzhalters kommt der Inhalt der Tabelle tbSQL
  // entsprechend den Auswahlkriterien.
  If (AnsiCompareText(TagString,'CONTENT') = 0) Then Begin
    tbSQL.Filter := 'EXCELREPORT=2';
    tbSQL.Filtered := true;
    tbSQL.Open;
    ReplaceText := dstpSQL.Content;
    tbSQL.Close;
    tbSQL.Filter := '';
    tbSQL.Filtered := false;
  End Else Begin
    // ... hier können beliebige weitere Ersetzungen stattfinden
  End;
end;
Zur Laufzeit wird von der Komponente nun an der Stelle <#CONTENT> der HTML-Seite der dynamische Inhalt eingefügt.
Der dynamische Inhalt ergibt sich in diesem Beispiel aus der Ergebnismenge der Tabellenkomponente tbSQL, die durch einen Filter eingeschränkt wird. Die Aufbereitung des Inhaltes wird von der Komponente dstpSQL (TDataSetTableProducer) durchgeführt.

Das Ganze geht mit verblüffend wenig Quelltext und ist, wenn man es ausreizt, hochflexibel.
Im HTML-Text kannst Du jeden beliebigen Inhalt durch Tags der Form <#TAGNAME> über die Ereignisroutine eines TPageProducer ersetzen lassen.

Nutze hier die Möglichkeiten, die Dir Delphi bietet. Das Bauen eigener Ersetzungsroutinen würde das vorhandenen bestenfalls nachbilden. Warum das Fahrrad nochmal erfinden, Delphi bietet die hier schon ein sehr leistungsfähiges Gefährt an.

Stephan
  Mit Zitat antworten Zitat