4D v12.4

4D HTML Tags

Home

 
4D v12.4
4D HTML Tags

 

4D HTML Tags  


 

 

Der 4D Web Server bietet verschiedene 4D spezifische HTML Tags, um Referenzen auf 4D Variablen oder Ausdrücke in vom 4D Web Server gesendete statische HTML Seiten einzufügen, z.B. über die Befehle SEND HTML FILE und SEND HTML BLOB. Diese Seiten heißen halbdynamische Seiten.

Diese Ausdrücke werden als HTML Kommentare (<!--#Tag Inhalt--> in HTML Code) eingefügt. Die meisten HTML Editoren bieten Funktionalitäten zum Einfügen von Kommentaren.

Es gibt folgende 4D HTML Ausdrücke:

  • 4DTEXT, um 4D Variablen und Ausdrücke als Text einzufügen,
  • 4DHTML, um HTML Code einzufügen,
  • 4DSCRIPT, um eine 4D Methode auszuführen,
  • 4DINCLUDE, um eine Seite in eine andere einzufügen,
  • 4DIF, 4DELSE und 4DENDIF, um logische Bedingungen in den HTML Code einzufügen,
  • 4DLOOP und 4DENDLOOP, um Schleifen in den HTML Code einzufügen.

Der Inhalt von durch 4D gesendeten halbdynamischen Seiten wird analysiert, wenn die Befehle SEND HTML FILE (.htm, .html, .shtm, .shtml), SEND HTML BLOB (text/html vom Typ BLOB) oder SEND HTML TEXT aufgerufen bzw. wenn gesendete Seiten über URL aufgerufen werden. Im letzten Fall werden aus Optimierungsgründen Seiten mit den Endungen .htm und .html NICHT analysiert. Um hier das Analysieren der HTML Seiten zu erzwingen, müssen Sie die Endung .shtm oder shtml anfügen, z.B, http://www.server.com/dir/page.shtm.

Ein Beispiel dazu finden Sie in der Beschreibung zum Befehl WEB CACHE STATISTICS.

Nachfolgend die Fälle, in denen 4D die Tags in den HTML Seiten analysiert, die an Web Browser gesendet werden:

SendebedingungenAnalyse des Inhalts der gesendeten Seiten
Endungen der Seiten (allgemein):
.htm, .html, .shtm, .shtml (HTML Seiten)X
.xml, .xsl (XML Seiten)X
.wml (WML Seiten)
Über URLs aufgerufene SeitenX, außer Seiten mit der Endung .htm” oder .html
Aufruf des Befehls SEND HTML FILEX
Aufruf des Befehls SEND HTML TEXTX
Aufruf des Befehls SEND HTML BLOB X
(wenn BLOB vom Typ “text/html” ist)
Einfügen über <!--4DINCLUDE-->X

Damit 4D einen HTML Kommentar verwerten kann, muss er die Form <!--#4D...--> haben. Beachten Sie, dass bestimmte HTML Editoren automatisch auch andere Informationen in einen Kommentar einbauen, was beim Analysieren zu falsche Interpretation führen kann.

Dagegen sind andere HTML Ausdrücke in jedem Fall möglich, wie z.B. <--#Start list-->

Endet ein Kommentar <!--#4D... nicht mit -->, wird ein Text in Form von “<!--4D... : --> wird erwartet” eingefügt, die Analyse wird an dieser Stelle unterbrochen. Die Seite wird aber trotzdem gesendet, um den Fehler zu melden.

Es lassen sich auch verschiedene Arten von Ausdrücken ineinander verschachteln. Hierzu ein Beispiel für eine mögliche HTML Struktur:

<HTML>
...
<BODY><!--#4DSCRIPT/PRE_PROCESS-->   (Aufruf der Methode)
<!--#4DIF (meinevar=1)-->   (Wenn Bedingung)
   <!--#4DINCLUDE banner1.html-->   (Einfügen einer Unterseite)
<!--#4DENDIF-->   (Ende wenn)
<!--#4DIF (meinevar=2)-->
   <!--#4DINCLUDE banner2.html-->
<!--#4DENDIF-->
<!--#4DLOOP [TABLE]-->   (Schleife auf die aktuelle Auswahl)
<!--#4DIF ([TABLE]ValNum>10)-->   (Wenn [TABELLE]WertNr>10)
   <!--#4DINCLUDE subpage.html-->   (Unterseite einfügen)
<!--#4DELSE-->   (Sonst)
   <B>Value: <!--#4DTEXT [TABLE]ValNum-->
   </B><BR>(Feld anzeigen)
<!--#4DENDIF-->
<!--#4DENDLOOP-->   (Ende Schleife)
</BODY>
</HTML>

4DTEXT  

Syntax: <!--#4DTEXT VarName--> oder <!--#4DTEXT 4DExpression-->

Über <!--#4DTEXT VarName--> können Sie eine Referenz auf die 4D Variable oder den Ausdruck VarName beliebig auf einer HTML Seite einfügen. Schreiben Sie zum Beispiel:
<P>Welcome to <!--#4DTEXT vtSiteName-->!</P>,
wird der Wert der 4D Variablen vtSiteName in die HTML Seite eingefügt, wenn sie gesendet wird. Dieser Wert wird als einfacher Text eingefügt.

Über 4DTEXT können Sie auch einen 4D Ausdruck (nicht nur Variablen) in 4D HTML Kommentare einfügen. So können Sie den Inhalt eines Feldes, z.B. <!--4DTEXT [Tabellenname]Feldname-->) oder ein Tabellenelement z.B. <!--#4DTEXT arr{1}-->) oder eine Methode, die einen Wert zurückgibt (<!--#4DTEXT mymethod-->) direkt einfügen. Ein Ausdruck wird nach denselben Regeln konvertiert wie eine Variable. Ein 4D Ausdruck muss darüberhinaus auch die Syntaxregeln von 4D berücksichtigen.

Hinweis: Die Ausführung einer 4D Methode mit 4DTEXT richtet sich nach dem Wert des Attributs, das in den Methodeneigenschaften unter "Zugang per 4D HTML Tags und URLs (4DAction...)" eingestellt wurde. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.

Ein Ausdruck kann zwar direkt den Aufruf von 4D Funktionen enthalten, aus Gründen der Lokalisierung ist jedoch davon abzuraten. So interpretiert ein französisches 4D den Kommentar <!--4DTEXT Date du jour--> korrekt, ein englisches 4D bearbeitet diesen Kommentar jedoch nicht. Dasselbe gilt für die Bearbeitung von Zahlen, da der Dezimaltrenner je nach Land variieren kann. In beiden Fällen raten wir dringend, über Programmierung eine Variable zuzuweisen.

Bei einem Bewertungsfehler erscheint der eingefügte Text in Form von “<!--#4DTEXT meinevar--> : ## Fehler # Fehlercode”.

Hinweise:

  • Sie können mit Prozessvariablen arbeiten.
  • Sie können den Inhalt eines Feldes vom Typ Bild anzeigen. Dagegen lässt sich der Inhalt eines Array-Elements vom Typ Bild nicht anzeigen.
  • Da HTML eine textorientierte Anwendung ist, arbeiten Sie normalerweise mit Textvariablen. Sie können aber auch Variablen vom Typ BLOB einsetzen. Dazu genügt es, das BLOB im Modus Text without length zu generieren.
Hinweis zur Kompatibilität: Dieses spezifischere Tag ersetzt das generische Tag 4DVAR ab 4D v12.2. Das Tag 4DVAR wird noch unterstützt und funktioniert wie in früheren Versionen. Wir empfehlen jedoch, jetzt zum Einfügen von Text das Tag 4DTEXT zu verwenden.

4DHTML  

Syntax: <!--4DHTML MeineVar--> oder <!--4DHTML 4D Expression-->

Über dieses Tag können Sie eine Variable oder einen 4D Ausdruck (Feld, Array, Funktion, etc.) bewerten und in eine halbdynamische Seite einfügen. Der Unterschied ist, dass der Wert als ein HTML Ausdruck eingefügt wird. Nachfolgend sehen Sie ein Beispiel, wie sich das Einfügen der 4D Textvariablen meinevar mit den verfügbaren 4D Tags auswirkt:

Wert von meinevarTagsEinfügen in die Web Seite
meinevar:="<B>"<!--#4DTEXT meinevar--><B>
meinevar:="<B>"<!--#4DHTML meinevar-->&lt;B&gt;

Bei einem Bewertungsfehler erscheint der eingefügte Text in Form von “<!--#4DHTML meinevar--> : ## Fehler # Fehlercode”.

Hinweise:

  • Die Ausführung einer 4D Methode mit 4DHTML richtet sich nach dem Wert des Attributs, das in den Methodeneigenschaften unter "Zugang per HTML Tags und URLs (4DAction...)" eingestellt wurde. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.
  • Die Variable vom Typ Text sollte den Zeichensatz ISO Latin-1 verwenden. Weitere Informationen dazu finden Sie unter der Funktion Mac to ISO.
Hinweis zur Kompatibilität: Dieses Tag ersetzt ab 4D Version 12.2 das Tag 4DHTMLVAR. Das Tag 4DHTMLVAR wird noch unterstützt und funktioniert wie in früheren Versionen. Wir empfehlen jedoch, jetzt zum Einfügen von HTML Code das Tag 4DHTML zu verwenden.

Syntax: <!--#4DSCRIPT/MeineMeth/MeinParam-->

Mit 4DSCRIPT können Sie beim Senden von statischen HTML Seiten 4D Methoden ausführen. Gibt es in einer statischen Seite <!--#4DSCRIPT/MeineMeth/MeinParam--> als HTML Kommentar, wird die Methode MeineMeth mit dem Parameter MeinParam als ein String in $1 ausgeführt. Beim Laden der HTML Seite ruft 4D – sofern vorhanden – die Datenbankmethode On Web Authentication auf. Gibt diese Wahr zurück, führt 4D die Methode aus.

Die Methode gibt in $0 Text zurück. Beginnt der String mit dem Zeichencode 1, wird er als HTML betrachtet. Dasselbe Prinzip gilt auch für Variablen.

Hinweis: Die Ausführung einer Methode mit 4DSCRIPT richtet sich nach der Option “Benutze 4DVAR Kommentare anstatt Klammern”, die im Dialogfenster Methodeneigenschaften definiert wird. Weitere Informationen dazu finden Sie im Abschnitt Sicherheit der Verbindung.

Der Inhalt der Seite wird analysiert, wenn der Befehl SEND HTML FILE (.htm, .html, .shtm, .shtml) oder SEND HTML BLOB (blob vom Typ Text/html) aufgerufen wird.
Beachten Sie, dass die Analyse im nicht kontextuellen Modus auch erfolgt, wenn eine URL auf eine Datei mit der Endung “.shtm” oder “.shtml” zeigt, zum Beispiel http://www.server.com/dir/page.shtm).

Fügen Sie zum Beispiel den Kommentar “heute ist der <!--#4DSCRIPT/MYMETH/MYPARAM-->” in eine statische Seite ein. Beim Laden der Seite ruft 4D –sofern vorhanden– die Datenbankmethode On Web Authentication auf, dann die Methode MeineMeth und übergibt den String “/MeinParam” als Parameter $1.

Die Methode gibt in $0 Text zurück, zum Beispiel “31.12.09”, der Ausdruck “heute ist der <!--4DSCRIPT/MeineMeth/MeinParam––>” also zu “Heute ist der 31.12.09”.

Die Methode MeineMeth lautet:

 C_TEXT($0)\\Dieser Parameter muss immer angegeben sein
 C_TEXT($1)\\Dieser Parameter muss immer angegeben sein
 $0:=String(Current date)

Wichtig: Sie müssen in der aufgerufenen Methode immer die Parameter $0 und $1 angeben.

Hinweis: Eine Methode, die über 4DSCRIPT aufgerufen wird, darf keine Elemente der Oberfläche aufrufen, wie DIALOG, ALERT... .

Da 4D Methoden in ihrer eigenen Reihenfolge erscheinen, lässt sich eine Methode aufrufen, die den Wert von vielen Variablen setzt, auf die später im Dokument verwiesen wird.

Hinweis: Sie können in eine statische Seite beliebig viele <!--4DSCRIPT...--> Kommentare einfügen.

Syntax: <!--#4DINCLUDE Pfad-->

Mit 4DINCLUDE können Sie in eine HTML Seite den Hauptteil einer anderen HTML Seite einfügen, die mit dem Parameter Pfad bezeichnet ist. Der Hauptteil einer HTML Seite bezeichnet alles, was innerhalb der Ausdrücke <BODY> und </BODY> steht.

Der Kommentar <!--#4DINCLUDE--> ist besonders hilfreich in Verbindung mit dem Test (<!--#4DIF-->) oder den Schleifen (<!--#4DLOOP-->). Er ist auch praktisch, um Banner nach einem bestimmten Kriterium oder zufällig einzufügen.

4D analysiert die aufgerufene Seite im Moment des Einfügens, unabhängig von der Endung des Dateinamens, und fügt dann den evtl. geänderten Inhalt in die Seite ein, von der der Aufruf 4DINCLUDE ausgeht.

Eine Seite, die über den Kommentar <!--#4DINCLUDE--> eingefügt wurde, wird im Web Cache genauso gesetzt wie die Seiten, die über eine URL angefordert oder über den Befehl SEND HTML FILE gesendet wurden.
Übergeben Sie in Pfad den Zugriffspfad des einzufügenden Dokuments. Beachten Sie, dass sich bei Aufrufen mit 4DINCLUDE der Pfad nach dem Dokument richtet, das gerade analysiert wird, d.h. nach dem Hauptdokument. Verwenden Sie den Schrägstrich (/) als Trenner zwischen den Dokumenten und die zwei Punkte (..), um in der Hierarchie eine Ebene höher zu gehen (HTML Syntax).

Hinweis: Verwenden Sie das Tag 4DINCLUDE mit dem Befehl PROCESS HTML TAGS, ist der Standardordner der Ordner mit der Strukturdatei der Anwendung.

Sie können <!--#4DINCLUDE Pfad--> innerhalb einer Seite unbegrenzt verwenden. Die Aufrufe von
<!--#4DINCLUDE Pfad--> sind jedoch nur auf einer Ebene möglich. Sie können also nicht den Kommentar
<!--#4DINCLUDE meindok3.html--> in den Hauptteil der Seite meindok2.html einfügen, die wiederum von
<!--#4DINCLUDE meindok2--> aufgerufen wird, welches in meindok1.html eingefügt ist. 4D prüft außerdem, dass die Einfügungen nicht rekursiv sind.

Bei einem Fehler erscheint der eingefügte Text in Form von
"<!--#4DINCLUDE Pfad--> :Dokument kann nicht geöffnet werden".

Beispiele

<!--#4DINCLUDE Unterseite.html-->
<!--#4DINCLUDE Ordner/Unterseite.html-->
<!--#4DINCLUDE ../Ordner/Unterseite.html-->

Syntax: <!--#4DIF expression--> <!--#4DELSE--> <!--#4DENDIF-->

Der Kommentar <!--#4DIF expression--> ermöglicht in Verbindung mit den Kommentaren <!--#4DELSE--> (optional) und <!--#4DENDIF-->, HTML Code auf bedingte Weise auszuführen.
Der Parameter expression kann jeden gültigen 4D Ausdruck enthalten, der einen booleschen Wert zurückgibt. Er muss in Klammern stehen und die Syntaxregeln von 4D berücksichtigen.

Die Blöcke <!--#4DIF expression> ... <!--#4DENDIF--> können ineinander verschachtelt sein. Analog zu 4D muss jeder mit <!--#4DIF expression--> geöffnete Kommentar mit <!--#4DENDIF--> geschlossen werden.

Bei einem Interpretationsfehler wird zwischen <!--#4DIF --> und <!--#4DENDIF--> anstelle des Inhalts der Text “<!--#4DIF expression-->: Ein boolescher Ausdruck wurde erwartet” eingefügt.
Entspricht nicht jedem <!-#-4DENDIF--> ein <!--#4DIF -->, wird anstelle des Inhalts der Text
<!--#4DIF expression-->: 4DENDIF wurde erwartet” eingefügt.

Nachfolgendes Beispiel zeigt Code aus einer statischen HTML Seite, die je nach Ergebnis des Ausdrucks vname#"" eine andere Bezeichnung zeigt:

<BODY>
...
<!--#4DIF (vname#"")-->
Namen, die mit <!--#4DTEXT vname--> beginnen.
<!--#4DELSE-->
Es wurde kein Name gefunden.
<!--#4DENDIF-->
...
</BODY>

Syntax: <!--#4DLOOP Bedingung--> <!--#4DENDLOOP-->

Mit diesem Kommentar können Sie den Teil eines HTML Codes so oft wiederholen wie die Bedingung erfüllt ist. Der Teil wird begrenzt durch <!--#4DLOOP--> und <!--#4DENDLOOP-->. Sie können ineinander verschachtelt sein. Analog zu 4D muss jeder mit <!--4DLOOP Bedingung--> geöffnete Kommentar mit <!--#4DENDLOOP--> geschlossen werden.

Es gibt drei Bedingungstypen:

  • <!--#4DLOOP [Tabelle]-->Diese Syntax führt für jeden Datensatz der aktuellen Auswahl von Tabelle eine Schleife im laufenden Prozess aus. Der Teil des HTML Codes zwischen den beiden Kommentaren wird für jeden Datensatz der aktuellen Auswahl wiederholt.
Hinweis: Wird ein Tag 4DLOOP mit einer Tabelle verwendet, werden die Datensätze im Nur-Lesen Modus geladen.

Der HTML Code:

<!--#4DLOOP [Personen]-->
<!--#4DTEXT [Personen]Name--> <!--4DTEXT [Personen]Vorname--><BR>
<!--#4DENDLOOP-->

... lässt sich folgendermaßen in 4D Code übersetzen:

 FIRST RECORD([Personen])
 While(Not(End selection([Personen])))
    ...
    NEXT RECORD([Personen])
 End while

Hinweis: Verwenden Sie 4DLOOP mit einer Tabelle, werden die Datensätze nur im Lesemodus geladen.

Der folgende HTML Code:

<!--#4DLOOP [People]-->
<!--#4DTEXT [People]Name--> <!--#4DTEXT [People]Surname--><BR>
<!--#4DENDLOOP-->

... lässt sich in 4D Programmiersprache folgendermaßen ausdrücken:

 FIRST RECORD([People])
 While(Not(End selection([People])))
    ...
    NEXT RECORD([People])
 End while
  • <!--#4DLOOP array--> Diese Syntax führt für jedes Element des Array eine Schleife aus. Der laufende Zähler des Array erhöht sich mit jeder Wiederholung dieses Teils des HTML Codes.

Hinweis: Diese Syntax ist für zweidimensionale Arrays nicht verwendbar. Die Lösung: eine Methode mit verschachtelten Schleifen kombinieren.

Der HTML Code:

<!--#4DLOOP arr_names-->
<!--#4DTEXT arr_names{arr_names}--><BR>
<!--#4DENDLOOP-->

... lässt sich folgendermaßen in 4D Code übersetzen:

 For($Elem;1;Size of array(arr_names))
    arr_names:=$Elem
    ...
 End for
  • <!--#4DLOOP Methode-->Diese Syntax führt eine Schleife aus, solange die Methode Wahr zurückgibt. Sie lässt einen Parameter vom Typ Lange Ganzzahl zu. Sie wird das erste Mal mit dem Wert 0 (Null) aufgerufen, damit evtl. eine Initialisierung durchgeführt werden kann. Dann wird sie sukzessiv mit den Werten 1, 2, 3... aufgerufen, solange sie Wahr zurückgibt.

Aus Sicherheitsgründen kann die Datenbankmethode On Web Authentication einmal direkt vor der Initialisierung aufgerufen werden. Wird die Authentifizierung bestätigt, findet die Initialisierungsphase statt.

Warnung: Damit die Datenbank kompilierbar ist, müssen innerhalb der Methode unbedingt die Compilerbefehle C_BOOLEAN($0) und C_LONGINT($1) deklariert sein.

Der HTML Code:

<!--#4DLOOP meine_methode-->
<!--#4DTEXT var--> <BR>
<!--#4DENDLOOP-->

... lässt sich folgendermaßen in 4D Code übersetzen:

 If(AuthenticationWebOK)
    If(meine_methode(0))
       $counter:=1
       While(meine_methode($counter))
          ...
          $counter:=$counter+1
       End while
    End if
 End if

Die Methode meine_methode lautet:

 C_LONGINT($1)
 C_BOOLEAN($0)
 If($1=0)
  `Initialisierung
    $0:=True
 Else
    If($1<50)
       ...
       var:=...
       $0:=True
    Else
       $0:=False `Schleife wird beendet
    End if
 End if

Bei einem Interpretationsfehler wird zwischen <!--#4DLOOP--> und <!--#4DENDLOOP--> der Text “<!--#4DLOOP expression-->:Beschreibung” eingefügt.

Folgende Fehlerbeschreibungen sind möglich:

  • Ein derartiger Ausdruck wurde nicht erwartet (generischer Fehler);
  • Ungültiger Tabellenname (Fehler im Tabellennamen);
  • Es wurde ein Array erwartet (die Variable ist kein Array bzw. ein zweidimensionales Array).
  • Die Methode existiert nicht;
  • Syntaxfehler (beim Ausführen der Methode);
  • Zugriffsfehler (Rechte nicht ausreichend für Zugriff auf Tabelle oder Methode).
  • 4DENDLOOP wird erwartet (die Anzahl von <!--#4DENDLOOP--> ist nicht gleich der Anzahl von <!--#4DLOOP-->).

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Web Server

 
SIEHE AUCH 

4D Objekte mit HTML Objekten verbinden
URLs und Form Actions

 
SCHLÜSSELWÖRTER 

4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP***