SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

246 Plugins, 178 contribs sur SPIP-Zone, 266 visiteurs en ce moment

Accueil du site > Squelettes > Tutoriaux pour squelettes > La balise #ENV

La balise #ENV

Fonctionnement et usage divers et variés

25 septembre 2007 – par Maïeul – 37 commentaires

8 votes

Régulièrement, on lit sur la liste ou sur IRC « la balise #ENV, j’y comprends rien » . Tentons ici une explication sur le pourquoi du comment de cette balise...

#ENV, qu’est-ce à dire ?

Si nous lisons la documentation officielle, nous voyons que

[(#ENVxxxx,zzzz)] (depuis SPIP 1.8, SPIP 1.8.1) permet d’accéder à la variable de nom xxxx passée par la requête HTTP. zzzz est une partie optionnelle qui permet de retourner une valeur même si la variable xxxx n’existe pas.

Ah... mais en fait, c’est plus subtil que cela. En réalité, #ENV permet d’accéder aux variables dites d’environnement d’un squelette.

Qu’es aquò variable d’environnement ?

Un squelette SPIP est appelé dans un certain contexte. Par exemple, si vous appelez http://www.spip.net/spip.php?article1 ou bien http://www.spip.net/spip.php?article2, SPIP utilisera le même squelette , article.html, mais ne lui fournira pas les mêmes variables d’environnement.

Mais quelles variables d’environnement sont passées aux squelettes ?

C’est vrai ça, on sait que le squelette reçoit des variables d’environnement, mais lesquelles ?

En préambule, je vais vous donner un « truc » pour savoir quelles variables d’environnement sont passées à votre squelette.

Il s’agit d’un mode « debug » de SPIP. À la fin de l’adresse d’une page publique, rajoutez &var_mode=debug... Et là ? Surprise ! vous arrivez sur la page de débogage de squelette.

Sur cette page est listé chaque squelette appelé par la page, avec différents détails...

Ce qui nous intéresse plus particulièrement, c’est la partie #ENV [1]

Prenons l’exemple du squelette de la dist, appelons la page http://site.tld/spip.php?article2&var_mode=debug, nous obtenons ceci

Et voilà la liste des variables d’environnement, avec leurs valeurs... Ainsi, dans cet exemple, si nous écrivons #ENV{id_article} dans le squelette article.html ; nous obtiendrons 2

Bon, d’accord... maintenant, on connaît ce truc, mais bon ... ce serait mieux si on savait d’avance quelles sont ces fameuses variables.

Cas 1 : le squelette de la page

Sans doute le cas le plus simple. Le squelette qui est appelé « directement » quand on accède à une page reçoit comme variables #ENV l’ensemble des variables fournies par l’URL.

Exemple : http://www.site.tld/?page=xxx&var1=val1&

Passera au squelette xxx, les variables d’environnements suivantes :

VariableValeur
page xxx
var1 val1

Cas 2 : les squelettes inclus

Bon, bon... vous incluez un squelette dans votre squelette...

Si vous faites <INCLURE{fond=yy}{var2=val2}> [2], le squelette yy reçoit les variables d’environnement suivantes :

VariableValeur
fond yy
var2 val2

Signalons, au passage que SPIP transmet par défaut, le contexte de langue au squelette inclus.

Ainsi, si vous incluez votre squelette dans un contexte de langue française, le squelette inclus recevra comme variable #ENV« lang » la valeur « fr ». Cependant, il y a possibilité de forcer la variable lang ainsi passée. Il suffit de faire, par exemple<INCLURE{fond=yy}{var2=val2}{lang=en}>.

Signalons aussi le cas des paramètres sans arguments... du genre <INCLURE{fond=yy}{id_article}. Eh bien, dans ce cas, le squelette inclus recevra la variable #ENV « id_article » dont la valeur sera celle de l’id_article courant.

Enfin, signalons la possibilité de passer à un squelette inclus l’ensemble des variables d’environnement du squelette incluant ! Il suffit pour cela d’ajouter le critère {env} dans l’appel de votre INCLURE... Cependant, il est conseillé d’éviter cela : en effet, rappelons qu’un fichier de cache est généré pour chaque combinaison de variable #ENV.

Cas 3 : les modèles

Depuis SPIP 1.9.1, il est possible d’installer des modèles dans un article.

Pour rappel, la syntaxe générale de l’appel d’un modèle est <modelexxx|align|var1=val1|...|varn=valn>

Un modèle, n’est après tout qu’un squelette. Comme tout squelette, il reçoit des paramètres #ENV.

Prenons un exemple simple <modele1|left|variable=valeur>.

Les variables passées sont :

VariableValeur
id 1
id_modele 1
align left
variable valeur
lang Langue du contexte

Cas 4 : les formulaires

Rappelons qu’un formulaire est composé de deux fichiers :
-  un squelette
-  un fichier php, chargé de la prise en charge des données.

C’est le fichier php, qui en appelant le squelette, va lui transmettre un certain nombres de variables #ENV. Il faut donc regarder pour chaque formulaire ce qu’il en est (via le mode debug).

Cas 5 : les pages en « article »,« rubrique » etc

Les pages qui fonctionnent en URL propres fournissent leurs variables #ENV selon des règles spéciales.

Si une page fonctionnant en URL propres est une page de type « article », le squelette recevra comme variable d’environnement id_article de la valeur du numéro de l’article concerné...

Il en est de même pour les pages de types rubriques, mot, etc.

Des variables d’environnement de date

Des variables d’environnement calculées automatiquement [3] sont passées à tout les squelettes calculés sauf les modèles

Ces variables sont date et date_redac, qui ont pour valeur la date de calcul de la page... Elles servent au calcul des critères {age} et {age_redac}

Quelles utilisations ?

De nombreuses utilisations sont possibles, notamment à l’aide des filtres de comparaisons. Cela pourrait être l’objet d’une documentation à part.

La balise #EXPOSE

Citons cependant le plus souvent demandé : l’utilisation de la balise #EXPOSE.

Dans une boucle (OBJETS), où chaque objet à un identifiant unique de la forme id_objet [4], lorsque cet identifiant est égal à la valeur de la variable d’environnement id_objet, la balise #EXPOSE retourne son premier argument ; sinon, son second argument.

Exemple : Soit la page www.domaine.tld/spip.php?page=toto&id_article=2

Supposons que notre site n’ait que deux articles, les numéros 1 et 2.

Si le squelette toto.html contient la boucle suivante

<BOUCLE_toto(ARTICLES)>
l'article n°#ID_ARTICLE #EXPOSE{"est l'article courant", "n'est pas l'article courant"}
</BOUCLE_toto>

Alors le résultat sera

l’article n°1 n’est pas l’article courant
l’article n°2 est l’article courant

/ !\ La syntaxe SPIP prohibe totalement de mettre des boucles entres {}. Seule des balises et filtres peuvent exister.

Conclusion : encore pas mal de rédaction

Voilà ! Il y a encore pas mal de choses à écrire pour saisir toutes les subtilités des variables d’environnement, mais j’espère que cet article, laborieusement écrit à la sueur des mes doigts vous aura permis de comprendre un peu mieux comment les déterminer.

Notes

[1] ben oui quoi, c’est un tuto sur #ENV

[2] il semble que ce soit la même chose avec #INCLURE, mais j’avoue ne pas avoir saisi la nuance

[3] sauf si on force leurs valeurs lors d’un ou #INCLURE

[4] par exemple, dans une boucle (ARTICLES), chaque article à un identifiant id_article

Retour en haut de la page

37 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4

  • Répondre à ce message

    22 janvier 17:12, par filnug

    Merci beaucoup pour tes réponses !!!

  • Répondre à ce message

    22 janvier 16:44, par Maïeul

    comme l’a dit denisb dans son poste, il faut que tu fasse un |array_merge des #ENV (#ENV{mots[1]et#ENV{couleur[1]}. Par exemple

    {id_mot IN #ENV{mots[1]}|array_merge{#ENV{couleurs[1]}}}
  • Répondre à ce message

    20 janvier 12:54, par filnug

    décidément Maïlleul, votre doc est tjs intéressante !!!

    si j’ai une url ?rubrique1&mots[1]=1&couleurs[1]=4 , comment je fais pour récupérer les id de "mots" ET "couleurs ? du genre : <BOUCLE_mot_art(MOTS){id_mot==(#ENV{mots&couleurs}> ???

    Le but de cette recherche/question est en rapport à ma question pour le plugin "critère mots". Mon but est d’éviter que mon lien url <a href="[(#SELF|parametre_url{mots&#091;#COMPTEUR_BOUCLE&#093;,#ID_MOT})]"> n’ajoute tout le temps des nouveaux argument dans l’url, mais se contente de 2 maximum. D’où mon idée, d’une fois &mots=#ID_MOT et &couleurs=#ID_MOT

  • Répondre à ce message

    13 mai 2009 07:45, par MR

    Quelle version de spip utilises-tu ?

    Parce qu’un GROS bug présent dans la v2.0.7 a pour conséquence que seul le premier paramètre de l’URL est récupé par cette balise, donc #ENVtoto est vide alors que <?php
    $toto 
    $_GET['toto'];
    ?>
    affectera bien 7 à toto !
    Lire :

    http://trac.rezo.net/trac/spip/tick...

    Ce bug est corrigé dans la v2.0.8

  • Répondre à ce message

    6 mai 2009 20:05, par wal

    ok merci ! mais ça marche pas chez moi... si je résume, avec mon url monsite/spip.php ?rubrique60&toto=7, je passe la variable toto au squelette rubrique.html, et je récupère la valeur de toto dans ce squelette grace à la balise #ENVtoto, échec, sauf que ça me retourne systématiquement "échec" ... comprends pas... quelqu’un a deja rencontré ce problème ? j’ai passé l’après midi dessus, rien à faire...

  • Répondre à ce message

    6 mai 2009 18:09, par Maïeul

    oui, tout à fait ... c’était déjà le cas avant.

    Attention, la variable #ENV n’est passé qu’au premier squelette appelé, pas au squelette inclu, sauf si tu explicite lors de l’appel que tu veux lui passer...

  • Répondre à ce message

    6 mai 2009 16:07, par wal

    bonjour à tous, j’ai une petite question : dans spip 2, peux-t’on passer une variable quelconque dans une url (genre monsite/spip.php ?rubrique60&toto=7), et récupérer ensuite cette variable avec la balise #ENVtoto  ?

    merci de vos réponses !

  • Répondre à ce message

    18 janvier 2009 18:56

    Et bien pour ceux qui se sont posé la même question que Cédric et moi, il y a des éléments de réponse ici : http://forum.spip.org/fr_211033.html

  • Répondre à ce message

    17 janvier 2009 18:07, par Régis

    Un petit message simplement pour dire que je me cogne exactement à la même problématique que Cédric (voir quelques messages plus bas).
    Si quelqu’un a un élément de réponse pour cette question, je suis preneur.

    En attendant, j’utilise des boucles conditionnelles en php pour vérifier l’existence de mes #ENV précédemment passés en GET.

  • Répondre à ce message

    11 janvier 2009 19:34, par piercol

    OK, j’ai mis un moment à comprendre, mais maintenant ça fonctionne.

    Je pensais - je ne sais pas pourquoi - qu’il fallait déclarer une valeur par défaut de #ENV au moment du chargement de la page, j’avais écrit #ENV{tri} dans mes boucles. je l’ai corrigé en #ENV{tri,date} et ça roule.

    Merci pour le coup de main.

Pages 1 | 2 | 3 | 4

Répondre à cet article

Retour en haut de la page

Ça discute par ici

  • Formulaire de participation à un événement

    23 janvier – 16 commentaires

    Cet article tente de rassembler des informations au sujet de l’affichage d’un formulaire de participation aux événements gérés par le plugin Agenda développé par Cédric Morin. La version 2 du plugin Agenda permet d’afficher dans l’espace public des (...)

  • Plugin pour bannières 2

    16 novembre 2009 – 20 commentaires

    Ce plugin permet d’afficher et de gérer des campagnes d’information composées d’images ou animations. La balise #BANNIERE permet de positionner facilement cet objet dans vos squelettes. Plusieurs objets peuvent être placés sur la page et gérés en (...)

  • Un menu déroulant horizontal en plugin

    16 décembre 2006 – 89 commentaires

    Menu déroulant dynamique en plugin, sans limitation de niveaux de hiérarchie

  • Plugin Diapo

    11 décembre 2006 – 478 commentaires

    Plugin ajoutant le modèle <diapoXX> permettant d’insérer les images de l’article XX sous forme de galerie/diaporama reprenant le fonctionnement de la galerie Walma.

  • Plugin "En Travaux"

    25 janvier 2007 – 81 commentaires

    Ce plugin permet de créer une page qui va s’afficher à la place de vos pages web usuelles lorsque votre site doit subir une maintenance.