Le 13/10/2017 à 13:52, Mikhaël MYARA a écrit :
Bonjour,
je voudrais des éclaircissements sur la portée des variables en SPIP.
Déjà je voudrais un outil de diagnostic efficace, pour savoir, quand on est à l’intérieur d’une boucle (par exemple « RUBRIQUE »), comment connaitre tous les noms des balises en # (par exemple #TITRE) disponibles.
Pour une table SQL, comme les rubriques, n’importe quel champ de la table SQL devient une balise. Si une balise du même nom calculée existe déjà, il faut alors utiliser #CHAMP_SQL{nom_du_champ} (par exemple si la table spip_rubriques avait un champ 'url_rubrique', tu pourrais pas utiliser #URL_RUBRIQUE pour le récupérer (car cette balise est calculée).
Pour les différentes balises supplémentaire (calculées), le site SPIP.net les développe généralement. Par exemple #INTRODUCTION, #NOTES… etc.
Il n’y a pas de moyen dans une boucle de connaitre l’ensemble des possibilités.
J’ai vu qu’il y avait moyen, avec la boucle DATA par exemple, de récupérer les variables de l’environnement (il y a plus simple que DATA mais c’est juste un exemple), or ces variables n’apparaissent pas dans l’environnement. Existe-t-il une solution à cela ?
Ensuite, je deviens fou sur un script. Le contexte est SPIP-R, qui utilise ZCORE. Donc les scripts sont morcelés, par exemple le contenu d’une rubrique est dans un script article.html dans un répertoire « content », et pour le fil d’ariane ca se fait avec un fichier du même nom mais dans un répertoire « breadscrumb ».
Je joue avec le protocole GET html. Dans le script du dossier « content », tout se passe bien, si je fais passer des variables avec une URL qui contient des commandes en & je les récupère bien via #ENV. Parfait. Pour le fil d’Ariane, SPIP-R fait quelque chose de plus complexe pour traiter tous les types d’objets SPIP, via un script « dist.html » dans le répertoire breadscrumb, qui lui-même inclue un script « inc-objet.html », générique. Or dans inc-objet.html, je n’arrive pas à récupérer mes variables d’environnement, alors que ca marche très bien dans le script du répertoire « content ». Ca me donne l’impression que lors des inclusions on perd un morceau de l’environnement. Quelqu’un aurait les idées claires à ce sujet ? (ou une page à lire quelque part)
C'est assez simple.
SPIP charge les squelettes «racine» avec tout l’environnement passé (le GET dans ton cas). Ensuite, lorsque tu appelles des inclusions, il passe ou non l’ensemble de cet environnement, ou seulement certaines parties (ce qui évite de créer du cache pour rien dans certaines situations).
Dès que tu as #INCLURE ou <INCLURE> par exemple, la présence de 'env' ou de 'ajax' (ou des 2) va transmettre tout l’environnement reçu au squelette appelé, sinon, il ne transmet que les variables indiquées.
Dans le cas que tu cites, le inc-objet est appelé de la sorte :
#INCLURE{fond=breadcrumb/inc-objet,id_objet=#GET{id_objet},objet=#GET{objet}}
il y a seulement 'objet' et 'id_objet', donc aucun autre élément provenant de l’environnement ne sera reçu. Tu peux ajouter ta variable par exemple ici, ou ajouter 'env'…
Cela dit, si tu as un objet spécifique, tu peux te créer ton breadcrumb/xxxx.html qui prendra le pas sur le breadcrumb/dist.html.
De préférence, il faut éviter de transmettre tout l’environnement si ce n’est pas nécessaire aux inclusions. Donc si tu n’as pas de formulaire, de pagination, d’ajax, d’autres inclusions qui le nécessiterait, alors autant éviter. Privilégier aussi <INCLURE> à #INCLURE.
J’espère que c'est plus clair ?
MM.