Parenthèse vs accolade

Bonjour,

Un élément de la syntaxe spip que je n’arrive vraiment pas à maitriser, c’est l’utilisation des parenthèses et accolades …
Voici un test sur lequel je coince :

[(#ENV{suivant_role}|=={secretaire}|et((#SESSION{userinfo}|table_valeur{secretaire}|==1)}|oui)
      #SET{role_bureau,oui}
]

J’ai essayé plusieurs sorte de placement des parenthèses et des accolades, mais je ne m’en sort pas !
Voici ce que je veux faire :

SI 
(
  #ENV{suivant_role}  ÉGAL  secretaire
ET
  #SESSION{userinfo}|table_valeur{secretaire}  ÉGAL  1
)
ALORS
  #SET{role_bureau,oui}
MAIS
   NE PAS afficher résultat SI vrai !

Autre problème similaire :

<span style="display: none;">
   (#SESSION{statut}|=={0minirezo}|?{'1','0'})<br>
</span>

Dans ma page je veux afficher le résultat du test (0 ou 1) ci-dessus, mais ce que j’obtiens dans la page c’est :

<span style="display: none;">
	(0minirezo|=={0minirezo}|?{'1','0'})<br>
</span> 

au lieu d’un 0 ou 1 tout seul …

Y’a des des moments où je suis à 2 doigts de criser avec spip, et franchement l’aide de spip n’est pas toujours d’une … grande aide (il suffit de voir toutes les questions qui sont posées …) et pourtant c’est pas faute d’avoir lu beaucoup pour essayer de maitriser (un peu) ce langage ! J’ai l’impression que seul ceux qui bossent dessus depuis des années (comme les développeurs de spip) maitrisent bien ce truc.

Voilà, ça c’est parce que je suis un peu énervé parce que ça commence à faire un moment que je me suis attaqué à spip et j’ai l’impression d’à peine en savoir plus qu’au tout début, désolé …

Cordialement

TG

Le 29/08/2021 à 11:03, geth44 via Discuter de SPIP a écrit :

Y’a des des moments où je suis à 2 doigts de criser avec spip, et franchement l’aide de spip n’est pas toujours d’une … grande aide (il suffit de voir toutes les questions qui sont posées …) et pourtant c’est pas faute d’avoir lu beaucoup pour essayer de maitriser (un peu) ce langage ! J’ai l’impression que seul ceux qui bossent dessus depuis des années (comme les développeurs de spip) maitrisent bien ce truc.

Je ne vois pas de quoi tu parles, je n’ai jamais vu « plein de questions » sur le sujet de la syntaxe des balises et filtres.

Pour quelle raison te mets-tu à mélanger les deux les paramètres de filtres ? « =={ » : tu mets une accolade, « et( » : tu mets une parenthèse.

La doc est il me semble parfaitement claire là dessus :

  • les parenthèses et crochets obligatoires avec, servent uniquement à délimiter les contenus conditionnels qui ne vont s’afficher que si le résultat de la balise est non-vide, et à entourer la balise et ses filtres optionnels
  • les arguments, paramètres, que ce soit des balises qui en ont, ou des filtres, sont toujours des accolades, ya jamais d’exception

Il n’y a que ces deux règles en gros, et c’est expliqué aussi bien là :

que là en coloré et très synthétique :


RastaPopoulos

Bonjour,

sur le code affiché dans ton post, il y a deux parenthèses ouvrantes avant #SESSION, dont une qui ne semble pas fermée.

  • Le |et est une fonction/filtre, donc en syntaxe spip, les arguments supplémentaires sont à lui passer entre accolade.
  • La deuxième paire de parenthèse, qui englobe l’argument de |et{}, semble inutile, et induit peut être le compilateur en erreur.

En faisant ces modifs, est ce que ça fonctionne mieux ?

[(#ENV{suivant_role}|=={secretaire}|et{#SESSION{userinfo}|table_valeur{secretaire}|==1}|oui)
      #SET{role_bureau,oui}
]

Ici comme le dit RastaPopulos, sans les crochets, les parenthèses (et les pipes et accolades qu’elles comprennent) sont comprises comme faisant étant du html, et les #BALISES sont interprétées indépendamment les unes des autres.

Pour que leur contenu soit interprété comme une expression, même si on souhaite une affichage systématique sans partie conditionnelle, il faut tout de même utiliser les crochets (comme dans ton premier exemple) :

<span style="display: none;">
   [(#SESSION{statut}|=={0minirezo}|?{'1','0'})]<br>
</span>

La syntaxe peut être déroutante au début, peut être un peu verbeuse pour certaines opérations (et succincte pour d’autres), mais une fois qu’on a chopé quelques astuces permet beaucoup de souplesse dans les squelettes et les liens avec php.

Bravo pour le grand saut et la motivation, hésite pas à noter et partager les aspects qui te surprennent, ça peut aider à compléter ou reformuler la doc pour les personnes qui auraient le même profil que toi !

Les modifs de code ne sont pas testées, j’espère que ça fonctionne ou au moins donne des pistes, et que la reformulation peut aider.

Victor

Merci à tous les deux, en suivant les conseils de RastaPopulos, j’étais arrivé à la même syntaxe que donnée par Victor-tkp et cela fonctionne bien, et pour le second problème, j’avais effectivement omis les crochets.
En fait ce sont les vieux réflexes de programmeur qui m’induisent en erreur, comme regrouper les membres des tests entre parenthèses, et puis quand on ne comprend pas ce qui pêche, à force d’essayer, on fini par oublier de fermer correctement les paires de symboles … :woozy_face:
Ce que je n’avais pas vraiment compris, c’est que chaque membres de l’expression est traité de manière complètement linéaire, sans aucune précédence comme dans les langages de programmation habituel.
Pour les crochets, j’avais bien compris que dans « affichage conditionnel » cela impactait l’affichage en fonction du résultat, mais comme je voulais un affichage quel que soit le résultat du test conditionnel, je pensais qu’il n’y en avait pas besoin …
Encore merci pour vos lumières.

TG