La balise <SET> permet de déclarer une variable, lui affecter une valeur, ou exécuter une transformation sur cette valeur.
On remarque trois types de variable: les variables locales, les variables globales et les variables de session. Pour déterminer la qualité de la variable, lors de sa déclaration.
On utilisera l’attribut <set name ="nom_variable"> pour créer une variable locale. On peut aussi utiliser <set local="nom_variable">. Une variable locale est créée dans le "scope" en cours. Voir balise <scope>.
Pour une variable globale, on utilise l’attribut <set global ="nom_variable">.
Pour créer une variable de session, il suffit d'utiliser <set session="nom_variable">. Une variable de session reste accessible sur toutes les pages de votre site tant que la session reste ouverte. La session a une durée déterminée par le paramétrage du serveur et de votre navigateur.
<!-- Variable locale -->
<set name="variable1">
<!-- Variable de session-->
<set session="variable2">
Une fois le nom de la variable déterminé, on utilise l’attribut « value=’’valeur_variable’’ » pour lui donner une valeur.
Pour utiliser les variables que vous avez créées, vous devez placer le nom de la variable entre « $ ». Cette notation peut être utilisée directement dans le html, pour afficher le contenu de la variable dans un paragraphe par exemple, ou être utilisé dans du code xpx.
Le charset indique dans quel format on stocke la valeur. Si le phccharset et l'encoding sont différents, alors une conversion de phccharset vers l'encoding est appliquée.
Pour obtenir la liste des encoding disponibles sous Linux,utilisez la commande : iconv -l
<set name="exemple" value="1">
$exemple$
Vous pouvez également choisir de n'afficher qu'un certain nombre de caractères de votre variable. Pour cela, ajoutez à la suite du nom de la variable, mais toujours entre les "$", (x,y). X étant le premier caractère à être affiché, et Y le nombre de caractères qui seront affichés à la suite, la numérotation des caractères commençant à 1.
Pour utiliser une variable comme indice x ou y, indiquer le nom de la variable sans délimiteurs $
<set name="texte" value="bonjour">
$texte(4,4)$ renvoie jour
<set name="nbr" value="3">
<set name="texte" value="bonjour">
$texte(4,nbr)$ renvoie jou
Si vous voulez lire une variable dont le nom dépend d’autre variable (comme par exemple d'un compteur), vous devez écrire votre variable toujours entre "$", mais en ajoutant le nom de la variable suplémentaire entre "[]".
<set name="id" value="14">
$var[id]$ équivaut à $var14$
Il est également possible d’attribuer à une variable, une valeur égale à un calcul numérique. Pour cela, on remplace l’attribut « value=’’valeur_de_la_variable ‘’» par l’attribut « expr=’’calcul_numérique’’ ».
Pour les calculs, vous pouvez utiliser les opérateurs : + - * / ()
<set name=”calcule” expr=”3+(2*8)”>
$calcule$ renvoie donc la valeur 19
Lorsque vous réalisez des calculs d’argent, vous pouvez déclarer une nouvelle variable pour transformer l’affichage d’une valeur, pour qu’elle soit compatible avec le format monétaire français. Pour cela utiliser l'attribut: « money=’’valeur’’ ».
<set local="prix" money="3414.30">
$prix$ prend la valeur : 3 414,30
Vous pouvez réaliser des calculs binaires avec le XPX, pour cela il faut indiquer le numéro du bit que vous souhaitez obtenir.
La numérotation des bits est comprise entre 0 et 31.
Les entiers étant signés, en 32 bits les valeurs vont de -2147483648 (0x80000000) à 214748367 (7fffffff)
<set local="bit0" EXPR="201" BIT="0">
<set local="bit1" EXPR="201" BIT="1">
<set local="bit2" EXPR="201" BIT="2">
<set local="bit3" EXPR="201" BIT="3">
<set local="bit4" EXPR="201" BIT="4">
<set local="bit5" EXPR="201" BIT="5">
<set local="bit6" EXPR="201" BIT="6">
<set local="bit7" EXPR="201" BIT="7">
201=$bit7$$bit6$$bit5$$bit4$$bit3$$bit2$$bit1$$bit0$
Vous pouvez choisir de changer la valeur d’un bit à 0 ou 1. Pour cela, on remplace l’attribut précédent, « bit » par « biton=’’numéro_du_bit’’ » pour le passer à 1, et par « bitoff=’’numéro_du_bit’’ » pour le passer à 0.
Par exemple, dans le cas de la gestion des droits utilisateurs, on peut choisir d’attribuer un bit pour chaque type d’utilisateur :
(1) 001 => visiteur
(2) 010=>rédacteur
(4) 100=>modérateur
De sorte que l’utilisateur qui a ses droit à 5, est considéré à la fois comme un visiteur et un modérateur (4 + 1 = 5).
Ainsi, on peut changer rapidement les droits en changeant la valeur du bit qui correspond au rang des droits que l’on veut changer :
<set local="droit" expr="$droit_utilisateur$" biton="1">
Dans ce cas, quelques soient les droits précédemment accordés à l’utilisateur, on lui donne les droits de "visiteur", car la valeur du premier bit est passée à 1.
<set local="droit" expr="$droit_utilisateur$" bitoff="3">
Ici, on retire le droit de "modérateur" à l’utilisateur, en passant la valeur du troisième bit à 0.
Vous pouvez régler l'affichage d'une date (ou d'une heure), par l'attribut datetime="votre_date".
Le format d'entrée de "datetime" est déterminé selon le séparateur utilisé:
/ alors le format est francais dd/mm/aa
. alors le format est uk mm.dd.aa
- alors le format est iso aa-mm-dd
rien alors format iso aammdd
L'heure est entrée sous forme hh:mm:ss (l'heure est facultative).
Si la date entrée est vide ou non convertible, c'est la date et heure du système qui est utilisée.
Dans l'attribut "format", placer les caractères suivants pour formater votre date:
dd | Affiche le jour en numérique |
ddd | Affiche les trois premières lettres du jour |
dddd | Affiche le jour en toutes lettres |
mm | Affiche le mois en numérique |
mmm | Affiche les trois premières lettres du mois |
mmmm | Affiche le mois en toutes lettres |
yy | Affiche l'année en décennie |
yyyy | Affiche l'année entière |
hh | Affiche les heures |
mn | Affiche les minutes |
ss | Affiche les secondes |
tt | timestamp (en sec. depuis la 01/01/1970 0h00) |
ms | millisecondes (3 chiffres) - version 4.0a10 |
, | " ' : ( ) \ . espace | Caractères séparateurs acceptés |
yyyymmdd | Valeur par défaut |
Enfin, vous pouvez choisir la langue d'affichage des dates sous format textuel, avec l'attribut "lang". Il peut prendre trois valeurs: "es" pour l'espagnol, "fr" pour le français et "en" pour l'anglais (valeur par défaut)
<set name="date" datetime="100101 00:00:01" format="ddd dd mmmm yyyy hh:mn" lang="fr">
Donne pour résultat : "ven 01 janvier 2010 00:00"
L’attribut « rand » permet de donner à une variable une valeur numérique entière aléatoire, comprise entre 1 et la valeur maximum que vous précisez de cette manière : « rand="valeur_maximum"»
<set local="aléatoire" rand="100">
$aléatoire$ aura une valeur entière comprise entre 1 et 100.
Prendre la valeur absolue d'un nombre
<set local="montantHTABS" abs="$montantHT$">
L’attribut « upcase=’’votre_string’’ » remplace tous les caractères écrits en minuscule par leur équivalent en majuscule.
Pour une bonne gestion des accents en UTF-8, voir phccharset à la page variables internes.
<set local="texte" upcase="Du texte en minuscule">
$texte$ prend la valeur : DU TEXTE EN MINUSCULE
L’attribut « lowcase=’’votre_string’’ » transforme vos caractères majuscules, par leurs équivalents en minuscule.
Pour une bonne gestion des accents en UTF-8, voir phccharset à la page variables internes.
<set local="texte" lowcase="DU TEXTE EN MAJUSCULE">
$texte$ prend la valeur : du texte en majuscule
L’attribut « noaccent="votre_string" » remplace les caractères accentués par leurs équivalent sans accent.
Pour une bonne gestion des accents en UTF-8, voir phccharset à la page variables internes.
<set local="texte" noaccent="Du texte accentué">
$texte$ prend la valeur : Du texte accentue
L’attribut « strescape="votre_string" » remplace les caractères quotes de votre string en un équivalent pouvant être inséré dans une base de données.
<set local="texte" strescape="l’apostrophe">
$texte$ prend la valeur l'apostrophe pour la version Sybase ou l\’apostrophe pour la version Mysql.
Attention ! L'utilisation de cette fonction dans le but d'une utilisation dans une requête SQL, implique la désactivation de la variable sqlescapestr.
L’attribut « keycode="votre_string" » affecte une clé cryptée sur la base de string à une variable. La clé contient 16 caractères (majuscules et chiffres).
<set local="texte" KEYCODE="mot de passe">
$texte$ contient par exemple : CX8D7JZ9LM9G8LL3
L’attribut « strcode="votre_string" » encode les caractères non-ASCII en HTML.
Ce traitement gère aussi les doubles quotes (") qui sont remplacées par #34;
<set local="texte" strcode="Du texte accentué">
$texte$ prend la valeur : Du texte accentu&ecute;
L’attribut « strdecode="votre_string" » transforme les caractères codés en HTML par leur correspondance en ASCII.
<set local="texte" strdecode=" Du texte accentu&ecute;">
$texte$ prend la valeur : Du texte accentué
L’attribut « urlcode="votre_string" » transforme une chaine de texte pour qu'elle soit utilisable dans une URL. Les espaces sont transformés en +, et les caratères spéciaux et accentués sont transformés en leurs équivalents en hexadécimal.
<set local="texte" urlcode="une adresse internet">
$texte$ prend la valeur : une+adresse+internet
Vous pouvez aussi changer le texte contenu dans une string. Dans ce cas, vous devez utiliser les attributs « value="contenu_original" » pour préciser le texte de base, « replace="texte à changer" » pour selectionner le morceau de texte qui sera supprimé et « by="texte de remplacement" » pour indiquer par quoi vous voulez remplacer le texte précédemment sélectionné.
<set local="formule_politesse" value="Bonjour" replace="jour" by="soir">
Transforme la valeur initial "Bonjour" en "Bonsoir"
Vous pouvez également obtenir le nombre de caractères dans une chaine de caractère. Pour cela, il suffit de déclarer une nouvelle variable qui contiendra ce nombre et utiliser l’attribut « len="chaine_de_caratère" » pour indiquer la string à compter.
<set local="taille" len="commentaire">
On peut ainsi facilement faire un test pour voir si la chaine de caractère est trop grande ou non pour être affichée.
La fonction TRIM permet d'enlever les espaces, tabulations, sauts de ligne et retours chariot placés en début et fin de chaîne.
LTRIM pour Left TRIM enlève seulement ces caractères en début de chaîne.
RTRIM pour Right TRIM enlève seulement ces caractères en fin de chaîne.
<set local="utile" trim=" a garder ">
$utile$ -> "a garder"
L’attribut « xmlcode="votre_string" » transforme les caractères spéciaux en ou nn est le code ASCII du caractère.
<set name="test" xmlcode="ça fait très mâle!">
$test$ -> ça fait tr€s mâle!
L’attribut « encode64="votre_string" » transforme une chaine de texte au format base64.
Disponible à partir de la version 3.8b18
<set local="texte64" encode64="Mon texte!">
$texte64$ prend la valeur : TW9uIHRleHRlXCE=
L’attribut « decode64="votre_string" » transforme une chaine au format base64 vers sa valeur d'origine.
Disponible à partir de la version 3.8b18
<set local="texte" decode64="TW9uIHRleHRlXCE=">
$texte$ prend la valeur : Mon texte!
Depuis la version v3.8b-rc9, le nouvel attribut hash="algo"permet de calculer le hachage de value, retourné dans name (sous forme d'une chaîne hexadécimale).
algo peut valoir sha1, sha256 ou md5 (ou sha512 depuis la v3.8rc37).
On peut utiliser une clef hmac comme mot de passe pour modifier le hachage.
<set name="key" value="23C7943BB8F95E75BB4027">
<set name="val" value="La valeur dont je veux calculer le hash">
<set name="varHash" value="$val$" hmac="$key$" hash="sha256">
Convertit un texte contenant du code HTML en texte simple en supprimant toutes les balises.
<set name="textHTML" value="<body><html><p>Texte à isoler</p></body></html>">
<set name="pureText" html2text="$textHTML$">
Donnera : Texte à isoler
Encrypte la chaine en utilisant le protocole AES256.
ATTENTION : le résultat est binaire, il doit être converti en Base64 (encode64) ou en hexadécimal (chartohexa) si il doit être affiché ou utilisé en html.
<set name="nomCode" encrypt="$monTexte$">
<set name="nomCodeB64" encode64="$nomCode$">
Décrypte une chaine obtenue par <set encrypt="...">.
<set name="nomBin" decode64="$nomCodeB64$">
<set name="texte" decrypt="$nomBin$">
Convertit une chaine en caractères hexadécimaux (majuscules)
<set name="var" chartohexa="abc">
Ici, $var$ vaudra 616263 (61,62,63 sont les codes ASCII de a, b et c en hexadécimal).
Convertit des caractères hexadécimaux (majuscules) en leur équivalent ASCII.
<set name="var" hexatochar="616263">
Ici, $var$ vaudra abc
Téléchargez rapidement la dernière version du XPX: Version 3.8-rc16 - 05/02/2019
Venez nous poser vos questions et voir les problèmes courants que vous pouvez rencontrer
Aidez-nous à faire vivre ce site en faisant un don