La structure prédéfinie « THISTAG »
contient des variables qui permettent de contrôler et gérer l'exécution des
tags personnalisés. Quand un tag est appelé, ColdFusion crée automatiquement la
structure « THISTAG » et initialise les variables de cette structure
avec les valeurs appropriées.
a) hasendtag
L'appel d'un tag utilise la syntaxe XML : un
appel est fait par une balise XML (par exemple cfmodule) qui peut avoir
une fermeture ou non.
- Exemple
d'appel qui n'a pas une fermeture :
Dans
ce cas, ColdFusion initialise la variable «
hasendtag
» à « no ».
- Exemple
d'appel qui a une fermeture :
Dans
ce cas, ColdFusion initialise la variable «
hasendtag
» à « yes ».
b) executionmode
Cette variable peut prendre trois valeurs,
'start', 'end', et 'inactive' :
-
Si la balise XML n'a pas une fermeture, le tag sera exécuté une seule fois. Dans
ce cas ColdFusion initialisera la variable «
executionmode
» à 'start'.
-
Si la balise XML a une fermeture, le tag sera exécuté deux fois :
-
pour le premier appel ColdFusion initialise la variable «
executionmode
» à
'start' ;
-
et pour le deuxième appel «
executionmode
» sera initialisée à 'end'.
Il est important que le code prenne en considération
les valeurs des variables «
hasendtag
» et «
executionmode
» pour
éviter une exécution inattendue et/ou incorrecte. Par exemple, imaginer un tag
qui insère des données dans la base de données : Si on ne fait pas de
teste sur le mode d'exécution de ce tag, on risque que le tag soit appelée deux
fois, et donc le traitement d'insertion des données soit exécuté deux fois
!
TODO : Ajouter des
détails pour la valeur « inactive ».
c) generatedcontent
Cette variable contient le corps de la balise. Le
tag personnalisé peut utiliser cette variable pour lire ou modifier le contenu
de cette variable. Si le corps contient un contenu dynamique (variables,
expressions, ou fonctions) alors ce contenu sera évalué avant que le corps de
la balise soit affecté à cette variable. Pour mieux comprendre l'utilisation de
la variable «
generatedcontent
», prenons l'exemple du tag
personnalisé « MyQueryCustomTag.cfm » :
Voici l'exemple d'un appel du tag
« MyQueryCustomTag.cfm » :
Remarque :
Il faut noter que la variable « tableName » sera évaluée avant que le
contenu ne soit envoyé au tag. Dans l'exemple précédent, à l'exécution du tag
« MyQueryCustomTag » la variable «
generatedcontent
» va
avoir la valeur « SELECT user_name FROM users ».
Analysons le code du tag
« MyQueryCustomTag.cfm » de l'exemple précédent :
- Au
premier appel du tag personnalisé (executionmode EQ "start") la
variable «
generatedcontent
» est vide à cause qu'elle n'a pas été
encore initialisée. Donc, c'est inutile de faire quoi que ce soit à ce niveau
avec cette variable.
- Au
deuxième appel du tag personnalisé (executionmode EQ "end"), on
exécute la requête contenue dans la variable
«
generatedcontent
» (« SELECT user_name FROM users ») puis
on appel un modèle prédéfini pour le formatage du résultat de la requête.
Enfin, on initialise la variable «
generatedcontent
» à une chaîne
vide pour que son contenu ne soit pas affiché.
d) assocattribs
Cette variable est utilisée pour les tags imbriqués. Elle permet de rendre des variables visibles entre les tags parent/enfant.