Si ColdFusion s'insère si facilement au coeur d'une page
HTML c'est grâce au CFML (ColdFusion Markup Language).
En effet, de part ses tags très similaires aux tags HTML,
on peut considérer que ColdFusion "enrichit" le
langage HTML au point de le rendre dynamique.
Les tags CFML de base
Voici au travers d'exemples simples les quelques tags de base
du langage ColdFusion. (Note : L'ecriture en majuscules des tags
est facultative).
Tout d'abord, deux façons de commenter ces sources :
<!--- Code non interprété
par le serveur Coldfusion, invisible dans le source html--->
<!-- Code non interprété par le serveur Coldfusion,
visible dans le source html-->
Pas vraiment plus compliqué : Assigner un nombre à
une variable, puis l'afficher à l'écran :
<html>
<head>
<title>Exemple de code ColdFusion inséré dans
du code HTML</title>
</head>
<body>
<CFSET nb
= 42>
<CFOUTPUT>Valeur de nb : #nb#</CFOUTPUT>
</body>
</html>
Suite à ces premières lignes de code on note que
<CFSET>, comme d'autres tags, n'a pas de "tag fermant",
contrairement à <CFOUTPUT>. Lorsque vous souhaitez
manipuler une valeur dynamique (ici "nb"), afin de l'afficher
par exemple, vous devez la placer entre deux caractères "#".
Ici, le tag <CFOUTPUT> sait qu'il doit interpréter
"#nb#" mais pas "Valeur de nb :".
Nous souhaitons maintenant qualifier "nb" par rapport
au nombre 100. Un traitement conditionnel s'impose :
<CFIF #nb# GT 100>
nb est strictement supérieur
à 100
<CFELSE>
nb est strictement inférieur
à 100
</CFIF>
GT signifie Greater Than (équivalent à ">"),
il existe aussi GTE (Greater Than or Equal), et construits sur le
même schéma, LT (Less Than) et LTE (Less Than or Equal).
Dans notre exemple, en conservant la valeur que nous avions donné
à nb (42), nous obtenons à l'écran : "nb
est strictement inférieur à 100".
Si le nombre de conditions à traiter est trop lourd pour
des <CFIF> traditionnels, le <CFSWITCH> prend le relais
:
<CFSET jdn = "developpeurs">
<CFSWITCH EXPRESSION=#jdn#>
<CFCASE VALUE="developpeurs">
Vous
êtes sur le JDN developpeurs.
</CFCASE>
<CFCASE VALUE="solutions">
Vous
êtes sur le JDN solutions.
</CFCASE>
<CFDEFAULTCASE>
Cette
rubrique n'existe pas.
</CFDEFAULTCASE>
</CFSWITCH>
Le <CFSWITCH> permet d'évaluer une expression et de
la comparer aux cas prédéfinis par l'utilisateur.
Si la valeur de l'expression ne correspond à aucune situation
prévue, alors un cas par défaut est appliqué
(facultatif).
Abordons maintenant la connexion à une base de données
et l'exploitation des résultats d'une requête :
<CFQUERY NAME="ma_requete" DATASOURCE="ma_source">
SELECT prenom
FROM employes
WHERE prenom LIKE 'J%'
ORDER BY prenom ASC
</CFQUERY>
Nombre d'employés : <CFOUTPUT>#ma_requete.recordcount#</CFOUTPUT><br>
<CFOUTPUT QUERY="ma_requete">
Prénom : #ma_requete.prenom#<br>
</CFOUTPUT>
On obtient à l'écran le nombre d'employés
dont le prénom débute par la lettre "J"
ainsi que leurs prénoms, classés par ordre alphabétique.
Par exemple :
Nombre d'employés : 3
Prénom : Jean-Claude
Prénom : José
Prénom : Julien
<CFQUERY> est le tag utilisé pour se connecter
à une source de donnée (à définir
au préalable dans l'administrateur ColdFusion). La requête
à exécuter doit se trouver entre les deux balises
<CFQUERY>.
Afin de connaître le nombre de t-uples ramenés par
la requête (ici les employés) nous pouvons utiliser
l'instruction "recordcount".
Nous retrouvons dans l'exemple ci-dessus l'instruction <CFOUTPUT>
mais cette fois-ci dotée d'une caractéristique supplémentaire.
L'attribut "QUERY="ma_requete"" permet en effet
de faire boucler le <CFOUTPUT> sur les résultats
de la requête. Nous dénombrons trois employés,
les trois prénoms vont donc être affichés.
La transmission de variables
Afin de pouvoir communiquer entre deux pages (ou même une
seule grâce à un renvoi des informations) il nous faut
maintenant aborder les différentes techniques de propagation
de l'information sous ColdFusion. La transmission par URL
et par formulaire constituent les deux principales façons
de faire.
Afin de ne pas multiplier inutilement nos pages ColdFusion lors
d'une transmission de variables, il est possible, pour de petits
traitements (sous peine de perte de clarté) de transmettre
les informations à une seule et même page.
Si par exemple nous souhaitons vérifier (sur la bonne foi
de l'internaute) que son âge ne dépasse pas 26 ans,
nous pouvons procéder ainsi :
<CFIF not
isdefined("form.passtwo")>
<form
name="age_check" method="post">
Entrez
votre âge : <input type="text" name="age"
size=4 maxlength="2">
<input
type="hidden" name="passtwo">
</form>
<CFELSE>
<CFIF
#form.age# LT 26>
Vous
bénéficiez de la réduction "moins de 26
ans"
<CFELSE>
Désolé,
vous ne bénéficiez pas de la réduction "moins
de 26 ans"<br>
</CFIF>
</CFIF>
La fonction isdefined() teste si le champ "passtwo"
est défini ou pas. Dans l'affirmative cela signifie que le
formulaire a été envoyé, on peut donc tester
la valeur de l'âge. Dans le cas contraire, le champ "passtwo"
n'existe pas encore, le formulaire n'a pas été envoyé,
on doit permettre à l'internaute d'indiquer son âge.
L'expression "form.age" est facultative mais par convention
on indique, si besoin, la provenance d'une variable. Il en
est de même pour la transmission suivante que nous allons
aborder, la transmission par URL.
Nous souhaitons ici transmettre une variable "nb" de
valeur 42, par URL, de la page "a.cfm" vers la page "b.cfm".
Voici la marche à suivre :
(page "a.cfm")
<a href="b.cfm?nb=42">Vers
la page b</a>
Pour récupérer cette valeur dans la page "b",
rien de plus simple :
<CFOUTPUT>#url.nb#</CFOUTPUT