[Résolu] switch case : comment ça marche ?

Bonjour,
Dans mes articles, j’ai un Champs Extra « Boutons radio ».
Champ : SITUATION
Liste de choix :

  • Soins,
  • Adoption,
  • Formulaire,

Je n’arrive pas à retourner avec SWITCH CASE (le plugin Et la lame du couteau suisse) une image (ni même un texte) en fonction de la sélection. (Ce n’est pas un choix laissé à l’internaute dans un formulaire mais un champ de mes articles.)

<div class="liste">
<BOUCLE_art(ARTICLES) {id_rubrique} {par date_accueil}>
	<div class="item">
<h3>#TITRE</h3>
	#SWITCH{#SITUATION}
		[(#CASE{soins}) #CHEMIN{img/soins.png}|balise_img|image_reduire{42}]
		[(#CASE{adoption}) #CHEMIN{img/adoption_coeur.png}|balise_img|image_reduire{42}]
		[(#CASE{formulaire}) #CHEMIN{img/adoption_en-cours.png}|balise_img|image_reduire{42}]
		...
		[(#CASE_DEFAULT) Autre attribut.]
	</div>
</BOUCLE_art>
</div>

Testé également avec #SWITCH{#ENV{situation}} et plusieurs déclinaison des exemples de l’article sur Contrib…

Je me trompe quelque part, c’est sûr, mais où ?

Ça m’éviterai les boucles [(#SITUATION|oui) … ]

<div class="liste"
<BOUCLE_art(ARTICLES) {id_rubrique} {par date_accueil}>
	<div class="item">
<h3>#TITRE</h3>
	<BOUCLE_situ1(ARTICLES) {id_article} {situation=soins}>
		[(#SITUATION|oui) En soins ]
	</BOUCLE_situ1>
	<BOUCLE_situ2(ARTICLES) {id_article} {situation=adoption}>
		[(#SITUATION|oui) À l'adoption ]
	</BOUCLE_situ2>
	<BOUCLE_situ5(ARTICLES) {id_article} {situation=formulaire}>
		[(#SITUATION|oui) Formulaire d'adoption ]
	</BOUCLE_situ5>
	...
	</div>
</BOUCLE_art>
</div>

Quelqu’un pour m’aider ?

(Accessoirement, le principe est identique pour des cases à cocher ou il y a une spécificité ?)

Amicalement,
David

Hello,

Le code a l’air ok (simplifiable un peu sans doute), une possibilité pouvant expliquer que ça ne fonctionne pas serait que la liste des choix possibles soit mal déclarée dans les champs extras, et que ça enregistre des valeurs numériques au lieu de « soins », « adoption », etc.

Qu’en est-il de ce côté là ? Comment est déclarée la liste de choix possibles ?

Bonjour,
Merci pour ton intérêt.
Coté déclaration :
Type de saisie : boutons radios
Non du champ : situation
liste des choix :
Soins|En soins
Adoption|À l’adoption
Formulaire|Formulaire d’adoption validé

Le champ enregistre bien la clé en base et me retourne sa valeur sur la boucle |OUI en exemple…

Tu as aussi vérifié la valeur de #SITUATION, ou même #SITUATION*, en l’affichant avant le #SWITCH ?
Pb de majuscule ?

Dans la déclaration les clés ont une majuscule (Soins), hors tout est en minuscule dans tes tests (soins), ça peut expliquer le problème.

Edit : ah Pat avait déjà repéré le problème, my bad

À noter que le filtre |balise_img n’est pas utile puisque |image_reduire accepte aussi un fichier en argument ( cf |image_reduire - SPIP )

Et le filtre |switchcase donnerait une écriture plus concise (cf Balises #SWITCH #CASE et filtre |switchcase - SPIP-Contrib) :

#SET{icone, #SITUATION|switchcase{
    Soins,soins,
    Adoption,adoption_coeur,
    Formulaire,adoption_en_cours}}
[(#CHEMIN{img/#GET{icone}.png}|image_reduire{42})]

Bonjour,

À 17h34 :

Est-ce à quelque chose comme ça que tu pensais, Pat :
#SITUATION*#SWITCH{#SITUATION}

Cette simple déclaration (sans aucune #CASE) suffit à me renvoyer la CLÉ de la sélection de la liste.
Y rajouter les #CASE sur mon modèle

		#SITUATION*#SWITCH{#SITUATION}
			[(#CASE{Adoption}) #CHEMIN{img/adoption_coeur.png}|balise_img|image_reduire{42}]
			...

n’y change rien, il n’en est pas tenu compte.
Les majuscules n’ont donc pas d’incidence ici. (Pour mémoire, dans mes boucles |OUI, il n’est tenu compte ni des majuscules ni des accents. Mais c’est une bonne pratique de respecter la case.)

23h30 :
Je vais donc retourner étudier la doc sur SPIP-Contrib et explorer la piste de JLuc…

Déjà merci à vous 3 : je commence à comprends cette balise ! :slight_smile: (Je ne connais pas le php et le peu que j’ai acquis des principes de SPIP, c’est à vous que je le dois. Ne lâchez pas !)

Toute autre participation est la bienvenue. Même pour expliquer les mêmes choses différemment.

Bonjour,

Solution trouvée !

  1. Contrairement à ce que j’ai dit précédemment et à une boucle avec l’arguement en critère (#SITUATION=adopte), la casse a bien une importance ici : respect des majuscules et accents (bonne pratique !).

  2. Le problème venait de mon champ Extra : cette balise n’accepte pas les traitements de raccourcis SPIP « Propres ». « Typo » et « Aucun » admis.

  3. Pour afficher mes images sur mon modèle de base, il faut les encadrer par [(…)].

Ce qui me donne :

		#SWITCH{#SITUATION}
			[(#CASE{Adoption}) [(#CHEMIN{img/adoption_coeur.png}|image_reduire{42})]]
			[(#CASE{Formulaire}) [(#CHEMIN{img/adoption_en-cours.png}|image_reduire{42})]]
		...

Un GRAND merci.

Et la toute belle solution de JLuc fonctionne maintenant très bien. (Mais moins compréhensible pour les novices en code qui n’ont pas l’exercice sous les yeux.)
:slight_smile: