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 :
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 !
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é …
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à :
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) :
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.
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 …
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.