4D v14.3Balises HTML 4D |
||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Balises HTML 4D
Balises HTML 4D
Le serveur Web de 4D fournit diverses balises HTML spécifiques à 4D, permettant d'insérer des références à des expressions ou variables 4D, ou différents types de traitements, à l'intérieur des pages HTML envoyées par le serveur Web 4D, par exemple à l'aide des commandes WEB ENVOYER FICHIER et WEB ENVOYER BLOB. Ces pages sont appelées pages semi-dynamiques. Ces balises doivent être insérées sous forme de commentaires HTML (<!--#LaBalise LeContenu--> en code HTML). La plupart des éditeurs HTML proposent des fonctions facilitant l'insertion de commentaires dans les pages statiques. Les balises HTML 4D disponibles sont les suivantes :
L’analyse du contenu des pages semi-dynamiques envoyées par 4D s’effectue au moment de l’appel à WEB ENVOYER FICHIER (.htm, .html, .shtm, .shtml), WEB ENVOYER BLOB (blob de type text/html), WEB ENVOYER TEXTE et lors de l'envoi de pages appelées via des URLs. Dans ce dernier cas, à des fins d'optimisation, les pages suffixées “.htm” et “.html” ne sont PAS analysées. Pour “forcer” l’analyse des pages HTML dans ce cas, vous devez les suffixer “.shtm” ou “.shtml” (par exemple http://www.server.com/dir/page.shtm). Un exemple d'utilisation de ce type de page est fourni dans la description de la routine WEB LIRE STATISTIQUES. En interne, l'analyseur travaille avec des chaînes utf-16, mais les données à analyser peuvent avoir été encodées différemment. Lorsque les balises contiennent du texte (par exemple 4DHTML), 4D convertit les données si nécessaire en fonction de leur provenance et des informations disponibles (charset). Voici un tableau récapitulatif des cas dans lesquels 4D analyse les balises contenues dans les pages HTML ainsi que les conversions éventuellement effectuées :
En vue d’une exploitation par 4D, un commentaire HTML doit toujours être de la forme <!--#4D...-->. Attention, certains éditeurs HTML ajoutent automatiquement d’autres informations au sein d’un commentaire, ce qui peut entraîner des erreurs d’analyse. La présence d’autres commentaires HTML (par exemple <!--Début de liste-->) est toutefois possible. Si un commentaire <!--#4D... ne se termine pas par -->, un texte de la forme “<!--#4D... : --> attendu” sera inséré et l’analyse sera interrompue à ce niveau (la page sera tout de même envoyée pour indiquer l’erreur). Il est possible d’imbriquer les différents types de commentaires. Voici par exemple une structure HTML parfaitement envisageable : <HTML> ... <BODY> <!--#4DSCRIPT/PRE_PROCESS--> (Appel de méthode) <!--#4DIF (mavar=1)--> (Si condition) <!--#4DINCLUDE banner1.html--> (Insertion d’une sous page) <!--#4DENDIF--> (Fin de si) <!--#4DIF (mavar=2)--> <!--#4DINCLUDE banner2.html--> <!--#4DENDIF--> <!--#4DLOOP [TABLE]--> (Boucle sur la sélection courante) <!--#4DIF ([TABLE]ValNum>10)--> (Si [TABLE]ValNum>10) <!--#4DINCLUDE subpage.html--> (Inclusion d'une sous page) <!--#4DELSE--> (Sinon) <B>Valeur : <!--#4DTEXT [TABLE]ValNum--></B><BR> (Affichage d’un champ) <!--#4DENDIF--> <!--#4DENDLOOP--> (Fin de boucle) </BODY> </HTML> Syntaxe : <!--#4DTEXT NomVar--> ou <!--#4DTEXT Expression4D--> La balise <!--#4DTEXT NomVar--> vous permet d’insérer une référence à une variable ou à une expression 4D à tout endroit d'une page HTML. Par exemple, si vous écrivez : La conversion de l’expression obéit aux mêmes règles que la conversion d’une variable. En outre, l’expression doit satisfaire aux règles de syntaxe de 4D. Note : L'exécution d'une méthode 4D avec 4DTEXT est soumise à la valeur de l’attribut “Disponible via les balises HTML et URLs 4D (4DACTION...)” défini dans les propriétés de la méthode. Pour plus d'informations sur ce point, reportez-vous à la section Sécurité des connexions. Bien qu’une expression puisse contenir directement des appels de fonctions 4D, il est déconseillé d’utiliser ce mode de fonctionnement, pour des raisons de localisation. Par exemple le commentaire <!--#4DTEXT Date du jour-->, bien que correctement interprété avec un 4D français, ne sera pas traité avec un 4D anglais. Il en va de même pour le traitement des nombres réels (car le séparateur décimal peut varier d’un pays à l’autre). Dans ces deux cas, il est préférable d’affecter une variable par programmation. En cas d’erreur d’évaluation, le texte inséré sera de la forme “<!--#4DTEXT mavar--> : ## erreur # code d’erreur”. Notes :
Note de compatibilité : Cette balise plus spécialisée remplace la balise générique 4DVAR à compter de la version 12.2 de 4D. La balise 4DVAR reste prise en charge et fonctionne comme dans les versions précédentes. Il est toutefois conseillé désormais d'utiliser la balise 4DTEXT pour insérer du texte. Syntaxe : <!--#4DHTML NomVar--> ou <!--#4DHTML Expression4D--> Cette balise permet d’évaluer une variable ou une expression 4D et de l’insérer dans une page en tant qu’expression HTML. A la différence de la balise 4DTEXT, cette balise n'échappe pas les caractères HTML spéciaux tels que ">". Par exemple, voici les résultats de l’insertion de la variable Texte 4D mavar à l’aide des balises 4DTEXT et 4DHTML :
En cas d’erreur d’évaluation, le texte inséré sera de la forme “<!--#4DHTML mavar--> : ## erreur # code d’erreur”. Note : L'exécution d'une méthode 4D avec 4DHTML est soumise à la valeur de l’attribut “Disponible via les balises HTML et URLs 4D (4DACTION...)” défini dans les propriétés de la méthode. Pour plus d'informations sur ce point, reportez-vous à la section Sécurité des connexions. Note de compatibilité : Cette balise remplace la balise 4DHTMLVAR à compter de la version 12.2 de 4D. La balise 4DHTMLVAR reste prise en charge mais pour une meilleure lisibilité du code, il est conseillé désormais d'utiliser la balise 4DHTML pour insérer du code HTML. Syntaxe : <!--#4DSCRIPT/NomMéthode/Param--> La balise 4DSCRIPT/ vous permet d'exécuter des méthodes 4D au moment de l'envoi de pages HTML statiques. La présence dans une page statique du commentaire HTML <!--#4DSCRIPT/NomMéthode/Param--> provoque l’exécution de la méthode NomMéthode avec le paramètre Param sous forme de chaîne dans $1. Au chargement de la page, 4D appelle la Méthode base Sur authentification Web (si elle existe). Si elle retourne Vrai, 4D exécute la méthode. Note : L'exécution d'une méthode avec 4DSCRIPT est soumise à la valeur de l’attribut “Disponible via les balises HTML et URLs 4D (4DACTION...)” défini dans les propriétés de la méthode. Pour plus d'informations sur ce point, reportez-vous à la section Sécurité des connexions. Par exemple, vous insérez dans une page statique le commentaire “Nous sommes le <!--#4DSCRIPT/MAMETH/MONPARAM-->”. Au chargement de la page, 4D appelle la Méthode base Sur authentification Web (si elle existe) puis la méthode MAMETH en lui passant comme paramètre (dans $1) la chaîne “/MONPARAM”. Le code de MAMETH est : C_TEXTE($0;$1) `Ces paramètres doivent TOUJOURS être déclarés Note : Une méthode appelée par 4DSCRIPT ne doit pas faire appel à des éléments d’interface (DIALOGUE, ALERTE...) Comme 4D exécute les méthodes dans leur ordre d’apparition, il est tout à fait possible de faire appel à une méthode qui fixe la valeur de plusieurs variables elles-mêmes référencées plus loin dans le document, quel que soit le mode utilisé. Note : Vous pouvez insérer autant de commentaires <!--#4DSCRIPT...--> que vous voulez dans une page statique. Syntaxe : <!--#4DINCLUDE chemin--> Ce commentaire permet d’inclure, dans une page HTML, une autre page HTML (désignée par le paramètre chemin). Par défaut, seul le corps de la page HTML désignée, c'est-à-dire le contenu compris entre les balises <body> et </body>, est inclus (les balises elles-mêmes ne sont pas incluses). Ce principe permet d'éviter les conflits liés aux meta balises présentes dans les en-têtes. Toutefois, si la page HTML désignée ne contient pas de balises <body></body>, la page entière est incluse. Il vous appartient alors de veiller à la cohérence des meta balises. Le placement dans le cache Web d’une page incluse à l’aide du commentaire <!--#4DINCLUDE --> répond aux mêmes règles que celles des pages demandées via un URL ou envoyées par la commande WEB ENVOYER FICHIER. Passez dans chemin le chemin d’accès au document à inclure. Attention : Dans le cas de la balise 4DINCLUDE, le chemin d’accès doit être défini relativement au document en cours d’analyse, c'est-à-dire au document “parent”, et non à la racine du serveur. Utilisez la barre oblique (/) comme séparateur de dossiers et les deux-points (..) pour remonter d’un niveau hiérarchique (syntaxe HTML). Notes :
Le nombre de <!--#4DINCLUDE chemin--> au sein d’une page n’est pas limité. Toutefois, les appels à <!--#4DINCLUDE chemin--> ne peuvent s’effectuer que sur 1 niveau. Cela signifie que par exemple vous ne pouvez pas insérer le commentaire <!--#4DINCLUDE mondoc3.html--> dans le corps de la page mondoc2.html, elle-même appelée par <!--#4DINCLUDE mondoc2--> inséré dans mondoc1.html. En cas d’erreur, le texte inséré est de la forme "<!--#4DINCLUDE chemin--> : Le document ne peut pas être ouvert". Exemples : <!--#4DINCLUDE souspage.html--> <!--#4DINCLUDE dossier/souspage.html--> <!--#4DINCLUDE ../dossier/souspage.html--> Syntaxe : <!--#4DBASE cheminDossier--> La balise <!--#4DBASE --> permet de désigner un répertoire courant qui sera utilisé par la balise <!--#4DINCLUDE-->. Le paramètre cheminDossier doit contenir un chemin d’accès relatif à la page courante. Il doit se terminer par une barre oblique (/). Le dossier désigné doit être situé à l’intérieur du dossier Web. Ainsi, le code suivant, devant spécifier un chemin relatif à chaque appel : <!--#4DINCLUDE subpage.html--> <!--#4DINCLUDE folder/subpage1.html--> <!--#4DINCLUDE folder/subpage2.html--> <!--#4DINCLUDE folder/subpage3.html--> <!--#4DINCLUDE ../folder/subpage.html--> ... peut être réécrit à l’aide de la balise <!--#4DBASE --> : <!--#4DINCLUDE subpage.html--> <!--#4DBASE folder/--> <!--#4DINCLUDE subpage1.html--> <!--#4DINCLUDE subpage2.html--> <!--#4DINCLUDE subpage3.html--> <!--#4DBASE ../folder/--> <!--#4DINCLUDE subpage.html--> <!--#4DBASE WEBFOLDER--> Définition d’un répertoire pour la page d’accueil à l’aide de la balise <!--#4DBASE --> : /* Index.html */ <!--#4DIF LangFR=True--> <!--#4DBASE FR/--> <!--#4DELSE--> <!--#4DBASE US/--> <!--#4DENDIF--> <!--#4DINCLUDE head.html--> <!--#4DINCLUDE body.html--> <!--#4DINCLUDE footer.html--> Dans le fichier head.html, le dossier courant est modifié via <!--#4DBASE -->, sans que cela change sa valeur dans Index.html : /* Head.htm */ /* ici le répertoire courant est relatif au fichier inclus (FR/ ou US/) */ <!--#4DBASE Styles/--> <!--#4DINCLUDE main.css--> <!--#4DINCLUDE product.css--> <!--#4DBASE Scripts/--> <!--#4DINCLUDE main.js--> <!--#4DINCLUDE product.js--> Syntaxe : <!--#4DIF expression--> {<!--#4DELSEIF expression2-->...<!--#4DELSEIF expressionN-->} {<!--#4DELSE-->} <!--#4DENDIF--> Utilisé en conjonction avec les commentaires <!--#4DELSEIF--> (optionnel), <!--#4DELSE--> (optionnel) et <!--#4DENDIF-->, le commentaire <!--#4DIF expression--> offre la possibilité d’exécuter du code HTML de manière conditionnelle. Les blocs <!--#4DIF expression--> ... <!--#4DENDIF--> peuvent être imbriqués sur plusieurs niveaux. Comme dans 4D, chaque <!--#4DIF expression--> doit avoir un <!--#4DENDIF--> correspondant. A l’aide de la balise <!--#4DELSEIF-->, vous pouvez tester un nombre illimité de conditions. Seul le code suivant la première condition évaluée à Vrai sera exécuté. Si aucune des conditions n’est vraie, aucune instruction n’est exécutée (s’il n’y a pas de <!--#4DELSE--> final). Les deux codes suivants sont équivalents.
Cet exemple de code inséré dans une page HTML statique affiche un libellé différent en fonction du résultat de l’expression vnom#"" : <BODY> ... <!--#4DIF (vnom#"")--> Noms commençant par <!--#4DTEXT vnom-->. <!--#4DELSE--> Aucun nom n’a été trouvé. <!--#4DENDIF--> ... </BODY> Cet exemple insère des pages différentes en fonction de l’utilisateur connecté : <!--#4DIF LoggedIn=False--> <!--#4DINCLUDE Login.htm --> <!--#4DELSEIF User="Admin" --> <!--#4DINCLUDE AdminPanel.htm --> <!--#4DELSEIF User="Manager" --> <!--#4DINCLUDE SalesDashboard.htm --> <!--#4DELSE--> <!--#4DINCLUDE ItemList.htm --> <!--#4DENDIF--> Syntaxe : <!--#4DLOOP condition--> <!--#4DENDLOOP--> Ce commentaire permet de répéter une portion de code HTML tant que la condition est remplie. La portion est délimitée par <!--#4DLOOP--> et <!--#4DENDLOOP-->. Il existe trois types de conditions :
<!--#4DLOOP [Personnes]--> <!--#4DTEXT [Personnes]Nom--> <!--#4DTEXT [Personnes]Prenom--><BR> <!--#4DENDLOOP-->
DEBUT SELECTION([Personnes])
<!--#4DLOOP tab_noms--> <!--#4DTEXT tab_noms{tab_noms}--><BR> <!--#4DENDLOOP-->
Boucle($indice;1;Taille tableau(tab_noms))
<!--#4DLOOP ma_methode--> <!--#4DTEXT var--> <BR> <!--#4DENDLOOP-->
Si(AuthentificationWebOK)
C_ENTIER LONG($1) En cas d’erreur d’évaluation, le texte “<!--#4DLOOP expression--> : descriptif” est inséré à la place du contenu situé entre <!--#4DLOOP --> et <!--#4DENDLOOP-->.
|
PROPRIÉTÉS
Produit : 4D VOIR AUSSI
Associer des objets 4D à des objets HTML MOTS-CLÉS 4DVAR, 4DTEXT, 4DHTMLVAR, 4DHTML, 4DSCRIPT, 4DINCLUDE, 4DIF, 4DLOOP, 4DELSEIF UTILISATION DE L'ARTICLE
4D - Langage ( 4D v14 R2) Hérité de :
Balises HTML 4D ( 4D v12.4) |
||||||||||||||||||||||||||||||||||||||