[(#ENV{variable, valeur_par_defaut})]
#ENV{variable}
permet d’accéder aux variables d’environnement d’un squelette (son contexte) [1].
Le squelette peut recevoir cette variable soit de l’URL (la requête HTTP), soit du fichier qui l’inclut, soit encore d’un retour de formulaire.
Exemple de variable passée dans l’url : spip.php?rubrique24&id_mot=5
Dans rubrique.html, #ENV{id_mot}
vaut 5.
Exemple de variable passée dans un INCLURE : <INCLURE{fond=mon_squelette,id_article=136}>
Dans mon_squelette.html, #ENV{id_article}
vaut 136.
Valeur par défaut
[(#ENV{variable, valeur_par_defaut})]
Le paramètre optionnel valeur_par_defaut contient la valeur qui doit être retournée si la variable n’existe pas (équivalent à [(#ENV{variable}|sinon{valeur_par_defaut})]
).
Utile quand un squelette est inclu à partir de différents squelettes, et que l’on en attend un comportement différent selon le contexte.
Court-circuiter les traitements de sécurité
Par défaut, SPIP applique les fonctions interdire_scripts
et entites_html
à la balise #ENV
. Comme pour toute balise, on peut supprimer les traitements automatiques de SPIP avec #ENV*
et #ENV**
(voir, pour l’usage de * et **, l’article #BALISE* et #BALISE**).
#ENV*
retourne la variable sans appliquer le filtre entites_html
, donc sans transformer tous les caractères spéciaux en entités HTML.#ENV**
retourne la variable sans appliquer la fonction interdire_scripts
. Elle renvoie donc le PHP exécuté. [2]
Ceci peut poser un problème de sécurité si cette variable reçoit une injection de code. Voilà pourquoi interdire_scripts
est là par défaut pour invalider les <
et autres <script language=php>
contenus dans la variable.
Néanmoins #ENV**
trouve une application lorsque l’on construit un formulaire. L’utilisation de la double étoile est ainsi nécessaire dans l’affichage des formulaires CVT. Par exemple, pour récupérer le tableau des erreurs dans le squelette du formulaire : #ENV**{erreurs}|table_valeur{clef}...
Afficher le contenu complet de #ENV
En cours de développement du site, si vous voulez afficher le contenu de #ENV
pour déboguer
[<pre>(#ENV**|unserialize|print_r{1})</pre>]
Important : Pour des questions de sécurité, il faudra absolument retirer ce code à la fin de développement de votre site.