4D v14.34D HTML Tags |
|||||||||||||||||||||||||||||||||||||||
|
4D v14.3
4D HTML Tags
|
Sendebedingungen | Analyse des Inhalts der gesendeten Seiten | Verwendeter Zeichensatz |
Endungen der Seiten (allgemein): | ||
.htm, .html, .shtm, .shtml (HTML Seiten) | X | |
.xml, .xsl (XML Seiten) | X | |
.wml (WML Seiten) | X | |
Über URLs aufgerufene Seiten | X, außer Seiten mit der Endung .htm” oder .html | Verwendung von Charset, übergeben als Parameter des "Content-Type" Header der Seite. Gibt es keinen, wird nach einem Tag META-HTTP EQUIV mit einem Charset gesucht. Andernfalls wird der standardmäßige Zeichensatz für den HTTP Server verwendet. |
Aufruf des Befehls WEB SEND FILE | X | Verwendung von Charset, übergeben als Parameter des "Content-Type" Header der Seite. Gibt es keinen, wird nach einem Tag META-HTTP EQUIV mit einem Charset gesucht. Andernfalls wird der standardmäßige Zeichensatz für den HTTP Server verwendet. |
Aufruf des Befehls WEB SEND TEXT | X | Keine Konvertierung erforderlich |
Aufruf des Befehls WEB SEND BLOB | X, wenn BLOB vom Typ "text/html" ist | Verwendung von Charset, gesetzt als Parameter des "Content-Type" Header der Antwort. Andernfalls wird der standardmäßig für den HTTP Server gesetzte Zeichensatz verwendet. |
Einfügen über <!--4DINCLUDE--> | X | Verwendung von Charset, übergeben als Parameter des "Content-Type" Header der Seite. Gibt es keinen, wird nach einem Tag META-HTTP EQUIV mit einem Charset gesucht. Andernfalls wird der standardmäßige Zeichensatz für den HTTP Server verwendet. |
Aufruf des Befehls PROCESS 4D TAGS | X | Text Daten: keine Konvertierung. BLOB Daten: Automatische Konvertierung vom Zeichensatz Mac-Roman zur Wahrung der Kompatibilität |
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 falscher 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 die Meldung “<!--4D... : --> wird erwartet” eingefügt, die Analyse wird an dieser Stelle unterbrochen. Die Seite wird 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)--> (If Bedingung) <!--#4DINCLUDE banner1.html--> (Einfügen einer Unterseite) <!--#4DENDIF--> (End if) <!--#4DIF (meinevar=2)--> <!--#4DINCLUDE banner2.html--> <!--#4DENDIF--> <!--#4DLOOP [TABLE]--> (Schleife auf die aktuelle Auswahl) <!--#4DIF ([TABLE]ValNum>10)--> (If [TABELLE]WertNr>10) <!--#4DINCLUDE subpage.html--> (Unterseite einfügen) <!--#4DELSE--> (Else) <B>Value: <!--#4DTEXT [TABLE]ValNum--> </B><BR>(Feld anzeigen) <!--#4DENDIF--> <!--#4DENDLOOP--> (End for) </BODY> </HTML>
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, spezifische HTML Zeichen wie ">" werden automatisch aufgelöst.
Ü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:
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. Im Gegensatz zum Tag 4DTEXT werden spezielle HTML Zeichen nicht aufgelöst. Hierzu ein Beispiel:
Wert von meinevar | Tags | Einfügen in die Web Seite |
meinevar:="<B>" | <!--#4DTEXT meinevar--> | <B> |
meinevar:="<B>" | <!--#4DHTML meinevar--> | <B> |
Hinweis: 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.
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, zum Einfügen von HTML Code nun 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 WEB SEND FILE (.htm, .html, .shtm, .shtml) oder WEB SEND 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 WEB SEND 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).
Hinweise:
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: <!--#4DBASE folderPath-->
Das Tag <!--#4DBASE --> bezeichnet ein Arbeitsverzeichnis, das vom Tag <!--#4DINCLUDE--> verwendet wird.
Beim Aufrufen in einer Web Seite ändert das Tag <!--#4DBASE --> alle nachfolgenden Aufrufe von <!--#4DINCLUDE--> auf dieser Seite bis zum nächsten <!--#4DBASE --> - sofern vorhanden. Wird der Ordner <!--#4DBASE --> aus einer enthaltenden Datei heraus geändert, findet er deren ursprünglichen Wert aus der übergeordneten Datei.
Der Parameter folderPath muss einen Pfad relativ zur aktuellen Seite enthalten und dieser muss mit einen Schrägstrich (/) enden. Der angegebene Ordner muss innerhalb des Web Ordners liegen.
Übergeben Sie das Schlüsselwort WEBFOLDER, um den Standardpfad, d.h. relativ zur Seite, wiederherzustellen.
Der folgende Code aus 4D v12, der für jeden Aufruf einen relativen Pfad angibt:
<!--#4DINCLUDE subpage.html--> <!--#4DINCLUDE folder/subpage1.html--> <!--#4DINCLUDE folder/subpage2.html--> <!--#4DINCLUDE folder/subpage3.html--> <!--#4DINCLUDE ../folder/subpage.html-->
... lässt sich mit dem Tag <!--#4DBASE --> schreiben wie folgt:
<!--#4DINCLUDE subpage.html--> <!--#4DBASE folder/--> <!--#4DINCLUDE subpage1.html--> <!--#4DINCLUDE subpage2.html--> <!--#4DINCLUDE subpage3.html--> <!--#4DBASE ../folder/--> <!--#4DINCLUDE subpage.html--> <!--#4DBASE WEBFOLDER-->
Verzeichnis für die Home Page über das Tag <!--#4DBASE --> erstellen:
/* Index.html */ <!--#4DIF LangFR=True--> <!--#4DBASE FR/--> <!--#4DELSE--> <!--#4DBASE US/--> <!--#4DENDIF--> <!--#4DINCLUDE head.html--> <!--#4DINCLUDE body.html--> <!--#4DINCLUDE footer.html-->
In der Datei Head.html wird der aktuelle Ordner durch <!--#4DBASE --> geändert, ohne dass sich sein Wert in Index.htm ändert:
/* Head.htm */ /* das Arbeitsverzeichnis hier ist relativ zur enthaltenen Datei (FR/ oder US/) */ <!--#4DBASE Styles/--> <!--#4DINCLUDE main.css--> <!--#4DINCLUDE product.css--> <!--#4DBASE Scripts/--> <!--#4DINCLUDE main.js--> <!--#4DINCLUDE product.js-->
Syntax: <!--#4DIF expression--> {<!--#4DELSEIF expression2-->...<!--#4DELSEIF expressionN-->} {<!--#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.
Über das Tag <!--#4DELSEIF--> können Sie eine unbegrenzte Anzahl von Bedingungen testen. Nur der Code, der auf die erste als Wahr gewertete Bedingung folgt, wird ausgeführt. Ist keine der Bedingungen wahr, wird keine Anweisung ausgeführt (wenn es kein abschließendes <!--#4DELSE--> gibt).
Sie können nach dem letzten Tag <!--#4DELSEIF--> ein Tag <!--#4DELSE--> verwenden. Sind alle Bedingungen falsch, werden die Anweisungen ausgeführt, die auf <!--#4DELSE--> folgen.
Die beiden nachfolgenden Codes sind gleichwertig:
<!--#4DIF Condition1--> /* Condition1 ist wahr*/ <!--#4DELSE--> <!--#4DIF Condition2--> /* Condition2 ist wahr*/ <!--#4DELSE--> <!--#4DIF Condition3--> /* Condition3 ist wahr*/ <!--#4DELSE--> /*Keine der Bedingungen ist wahr*/ <!--#4DENDIF--> <!--#4DENDIF--> <!--#4DENDIF-->
<!--#4DIF Condition1--> /* Condition1 ist wahr*/ <!--#4DELSEIF Condition2--> /* Condition2 ist wahr*/ <!--#4DELSEIF Condition3--> /* Condition3 ist wahr*/ <!--#4DELSE--> /* Keine der Bedingungen ist wahr*/ <!--#4DENDIF-->
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>
Dieses Beispiel fügt je nach angemeldetem Benutzer unterschiedliche Seiten ein:
<!--#4DIF LoggedIn=False--> <!--#4DINCLUDE Login.htm --> <!--#4DELSEIF User="Admin" --> <!--#4DINCLUDE AdminPanel.htm --> <!--#4DELSEIF User="Manager" --> <!--#4DINCLUDE SalesDashboard.htm --> <!--#4DELSE--> <!--#4DINCLUDE ItemList.htm --> <!--#4DENDIF-->
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:
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
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
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-->
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.
Produkt: 4D
Thema: Web Server
4D Objekte mit HTML Objekten verbinden
PROCESS 4D TAGS
URLs und Form Actions
4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP, 4DELSEIF
4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v14 R3)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)
Geerbt von :
4D HTML Tags ( 4D v12.4)
Gesplittet :
4D HTML Tags ( 4D v14 R4)