Bonjour à tous,
J’ai un petit cas sympa un squelette contenant 2 INCLUREs, chargés tous deux d’afficher des images.
Appelons-les INCLURE01 et INCLURE02.
Mon squelette est organisé comme suit :
Vérif. Condition (Affichage INCLURE01, ‹ Affichage autre chose ›)
INCLURE02
J’aimerais éviter d’afficher des images en doublons.
Quand une image est affichée par INCLURE01 (choisie selon un critère de mot-clé associé), je veux éviter qu’elle soit ré-affichée par INCLURE02.
Or : https://www.spip.net/fr_article1828.html#et
Je site : « Notons toutefois que les doublons sélectionnés dans le squelette inclus ne « remontent » pas dans le squelette incluant. »
Mon problème, c’est que l’utilisation de la syntaxe INCLURE m’arrange bien par rapport à la vérification de condition sur mon premier INCLURE.
Auriez-vous une technique pour me sortir de là, autre que d’abandonner mon INCLURE01 et de le remettre en « dur » dans mon squelette principal ?
Bonjour,
ce n’est pas forcément la solution, mais il faut peut-être noter que le critère de condition peut se déclarer dans une boucle :
<BOUCLE_doc01(DOCUMENTS{si #ENV{quelquechose}|=={valeur}|oui}{les autres critères}>
ce qui pourrait déjà permettre de placer la boucle dans le squelette directement… ?
Le 21/01/2021 à 12:03, Régis Kennel a écrit :
> Je site : "Notons toutefois que les doublons sélectionnés dans le squelette inclus ne "remontent"
> pas dans le squelette incluant."
Une manière générale de tout de même faire "remonter" des trucs d'un squelette inclu
c'est de faire en sorte qu'il calcule ce qu'il doit afficher, mais ne l'affiche pas,
et renvoie une #ARRAY avec 2 clés :
1) aff : ce qu'il a calculé et qu'il faut afficher ensuite (dans le squelette appelant)
et 2) res : ce qu'on veut qu'il "remonte" et qui doit être utilisé ailleurs.
Par exemple un id_article.
Le squelette appelant fait alors un #SET{lesdeux,<INCLURE>}
Puis affiche ce qu'il faut : #GET{lesdeux/aff}
et utilise l'autre resultat pour faire ce qu'il faut avec
par exemple en critère de boucle {id_article != #GET{lesdeux/res}}
Quand il y a des images dans ce qui doit remonter, il y a des bits non ascii
et dans mon expérience ça pose parfois problème à SPIP.
Alors dans ce cas j'encode_base64 avant de renvoyer les résultats
et la noisette appelante les decode_base64 avant d'afficher le 1)
et d'utiliser le 2) pour la suite.
Dans cette expression, si j’arrivais à remplacer le 2 par sa valeur calculée dynamiquement plus haut (dans le code), c’est à dire #GET{mon_id_image}, tout serait parfait.
Seulement voilà, quand je remplace mon 2 (de test concluant) par #GET{mon_id_image}, j’ai un message d’erreur :
Dans cette expression, si j’arrivais à remplacer le 2 par sa valeur calculée dynamiquement plus haut (dans le code), c’est à dire #GET{mon_id_image}, tout serait parfait.
Seulement voilà, quand je remplace mon 2 (de test concluant) par #GET{mon_id_image}, j’ai un message d’erreur :
Merci.
La suggestion de chankalan m’a mis sur la piste d’une solution fonctionnelle.
Etape 1: Y a-t-il une image à statut particulier dans mon article ?
Une boucle avec critère doublons, pour voir si mon article contient une image associée à un mot-clé particulier.
Si oui, je stocke l’id_document correspondant dans un #SET{image_couverture}
Etape 2 : Affichage conditionnel
Si #GET{image_couverture} est défini, j’appelle un INCLURE et je lui passe #GET{image_couverture}.
Si non, j’appelle un autre code qui affiche le texte de mon article de façon classique.
Ca donne au final, sur 2 lignes plutôt qu’une seule :
(#GET{image_couverture}|oui) <INCLURE{fond=inclure/mon_squel_inclus,id_article,id_document=#GET{image_couverture}} /> ]
[(#GET{image_couverture}|non)
#TEXTE
]
Dans le cas, ci-dessus, la syntaxe fonctionne.
Lorsque je tentais de faire tenir tout cela dans une ligne, avec la syntaxe [(Test conditionnel|?{’’,’’})], les accolades de mon #GET semblaient mettre la zone dans l’interprétation de l’expression, sans que je parvienne à trouver la syntaxe (éventuels échappements) qui aurait pu faire passer le truc.
Etape 3 : Affichage de la galerie d’images jointes à mon article.
Je peux maintenant appeler mon INCLURE02 en lui passant le critère doublons calculé à l’étape 1, ce qui évite à ce squelette inclus de ré-afficher l’image éventuellement déjà affichée à l’étape 2.