Les critères conditionnels de négation simple, utilisés sur des champs extérieurs à la table (des champs créant une jointure sur une autre table) ne font pas toujours ce que l’on suppose au premier abord.
Ainsi le critère {titre_mot!=rose}
sélectionne, sur une boucle ARTICLES tous les articles qui ne sont pas liés au mot clé « rose ». Mais le type de jointure créé fait qu’il sélectionne tous les articles ayant au moins un mot clé, donc au moins un mot clé qui n’est pas « rose ».
Or, bien souvent, on cherche simplement à afficher tous les articles n’ayant pas le mot « rose », même ceux qui n’ont aucun mot clé. C’est cela qu’effectue l’opérateur {!critere}
, qui permet de créer une seconde requête de sélection qui sera utilisée comme critère de sélection de la première :
<BOUCLE_articles(ARTICLES){!titre_mot = 'X'}> ...
Dans ce cas précis, les articles ayant un mot clé X sont sélectionnés, puis enlevés de la sélection SQL principale par un NOT IN (requête de sélection)
.
Cette écriture est aussi valable lorsqu’on force un champ de jointure, ainsi on pourrait tout aussi bien écrire :
<BOUCLE_articles(ARTICLES){!mots.titre = 'X'}> ...