test dans boucle DATA

je récupere depuis une interface de configuration les éléments suivants
a:23:{s:6:"nombre";s:1:"3";s:6:"login1";s:5:"18321";s:9:"password1";s:8:"********";s:11:"url_remote1";s:27:"https://owncloud.zaclys.com";s:17:"directory_remote1";s:4:"tmp1";s:16:"activer_synchro1";s:2:"on";s:25:"activer_effacement_local1";s:2:"on";s:14:"content_album1";s:1:"1";s:6:"login2";s:5:"user2";s:9:"password2";s:5:"pass2";s:11:"url_remote2";s:15:"https://cloud2/";s:17:"directory_remote2";s:4:"tmp2";s:16:"activer_synchro2";s:0:"";s:25:"activer_effacement_local2";s:0:"";s:14:"content_album2";s:0:"";s:6:"login3";s:5:"user3";s:9:"password3";s:5:"pass3";s:11:"url_remote3";s:15:"https://cloud3/";s:17:"directory_remote3";s:4:"tmp3";s:16:"activer_synchro3";s:2:"on";s:25:"activer_effacement_local3";s:2:"on";s:14:"content_album3";s:1:"3";s:11:"check_album";s:0:"";

je veux créer un tableau des datas login,passwd,url,remote,activer_synchro,activer_effacement,content_album
je recois 2 informations n’appartenant pas à mon tableau « nombre » et « check_album »

j’ai créé cette boucle

<BOUCLE_liste_lescloud(DATA){source table, #CONFIG{owncloud} }>
	[(#CLE|=={nombre}|non)
	[(#CLE|match{login}|oui) </tr><tr> ]
	<td class='statut'> #VALEUR</td> ]
</BOUCLE_liste_lescloud>

le test de la donnée « nombre » est bien excluse de mon tableau, mais je n’arrive pas à éliminer la donnée « check_album »

[(#CLE|=={nombre}|non)|ou(#CLE|=={check_album}|non) … élimine « check_data » mais laisse passer « nombre »
[(#CLE|=={nombre}|ou{check_data}|non) … aucune donnée n’est acceptée

et autres essais infructueux, malgré une lecture intensive de la doc des tests :frowning:

merci d’éclairer ma lanterne

Une solution réussie \o/

<BOUCLE_liste_lescloud(DATA){source table, #CONFIG{owncloud} }>
	[(#CLE|=={nombre}|non)
	[(#CLE|=={check_album}|non)
	[(#CLE|match{login}|oui) </tr><tr> ]
	<td class='statut'> #VALEUR</td> ] ]
</BOUCLE_liste_lescloud>

mais bon j’aurais aimé comprendre le comportement avec les ‹ ou ›
merci

1 « J'aime »

|ou est un filtre donc il faut mettre ses arguments entre accolades {} ce qui n’est pas le cas de [(#CLE|=={nombre}|non)|ou(#CLE|=={check_album}|non) donc ça c’est pas bon

|ou fait la conjonction de valeurs logiques true/vrai/chaine-non-vide ou false/faux/chaine-vide, donc son argument doit être une telle valeur logique. Or dans ton 2eme exemple [(#CLE|=={nombre}|ou{check_data}|non), l’argument de |ou est check_data, qui n’est pas une valeur logique mais une chaine de caractère non vide, donc toujours équivalent à « true ».

La soluce que tu donnes ensuite est mal indentée ce qui la rend particulièrement malaisée à comprendre et débuguer en cas de problème.
Voici une manière de l’indenter de manière plus lisible :

<BOUCLE_liste_lescloud(DATA){source table, #CONFIG{owncloud} }>
    [(#CLE|=={nombre}|non)
        [(#CLE|=={check_album}|non)
            [(#CLE|match{login}|oui) </tr><tr> ]
            <td class='statut'> #VALEUR</td>     
        ] 
    ]
</BOUCLE_liste_lescloud>

Et de là on voit ce que tu sembles vouloir faire :
[(#CLE|!={nombre}|et{#CLE|!={check_album}}) ...]

Bonjour, tu peux trouver pas mal d’astuces sur cette page, notamment sur l’usage des tableaux
https://contrib.spip.net/Astuces-courtes-pour-SPIP#ARRAY

[(#STATUT|in_any{#LISTE{publie,prop,finalise}}|non)
Cet objet a un statut ni publié ni proposé ni finalisé.
]
1 « J'aime »

ah oui, c’est effectivement plus lisible,
l’objectif est de ne pas traiter comme élément du tableau les clés nombre ou check_album

ainsi
(#CLE|!={nombre}|et{#CLE|!={check_album}}) c’est non(a).non(b) , qui fait le job

mais non(a).non(b) = a+b
donc
(#CLE|!=={nombre}|ou{#CLE|!=={check_album}}|non)
devrait le faire ? mais sans doute mal écrit ??? marche pô (doute avec |non)

en attendant je vais utiliser la syntaxe de touti
merci aux instructeurs :wink:

Les opérateurs « . » et « + » que tu utilises ici ne veulent rien dire en logique ou en spip, et le sens en PHP n’a rien à voir : tu emploies dans tes posts des notations qui n’existent pas, de même qu’avec spip tu employais une syntaxe qui n’existe pas (les parenthèses au lieu d’accolades).
Un peu de rigueur t’aidera beaucoup.
Ce qui a un sens c’est non a ET non b = non ( a ou b).
Et par ailleurs « non a », c’est pas pareil que « a ».
Je te laisse trouver l’expression avec « ou »…

pardon j’écrivais en logique booléenne le ET se note « . » et OU « + » et j’aurais aimé pouvoir écrire le non(a) avec la notation ā , mais ça se complique pour le non( a + b ) d’où ma simplification pas très académique je m’en excuse, mea-culpa

En plus je n’ai pas relu,
c’est non(a).non(b) , qui fait le job mais non(a).non(b) = a+b

, je voulais ecrire
c’est non(a).non(b) , qui fait le job mais non(a).non(b) = non( a + b )

d’où cette écriture en OU qui fonctionne
(#CLE|=={nombre}|ou{#CLE|=={check_album}}|non)

Comme j’avais laissé trainer un « non-voulu » ! devant ==
(#CLE|!=={nombre}|ou{#CLE|!=={check_album}}|non) ça ne risquait pas de marcher :disappointed:

Merci JLuc

1 « J'aime »