{critère ?}

(ceci est un message automatique)

Message posté par denisb <denisb@laposte.net> à la suite de l'article «
{critère ?} ».

http://www.spip.net/ecrire/?exec=articles&id_article=3996#id174007

** {critère ?}

* nouvelle proposition de rédaction

{id_rubrique ?} ou {id_rubrique ?= #ENV{d_rubrique}}

Un critère conditionnel (critère associé à l’opérateur logique ? )
ne sera pris en compte par sa boucle que si les données requises par ce
critère sont présentes dans l'environnement d'exécution de la boucle.

<BOUCLE_abc(ARTICLES) {id_rubrique ?}> S'il existe un id_rubrique (nn)
dans l'environnement d'exécution de la boucle, alors la boucle ne
sélectionnera que les données correspondantes à l'égalité id_rubrique
= #ENV{id_rubrique}

SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique = nn S'il n'existe pas d'id_rubrique dans
l'environnement d'exécution de la boucle, le critère sera totalement
ignoré SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

On notera que {id_rubrique ?} est équivalent à {id_rubrique?} ; à
{id_rubrique ?= #ENV{id_rubrique}} et à {id_rubrique?=#ENV{id_rubrique}}.

Quel intérêt alors à utiliser ce dernier type de notation ?

Si, plutôt qu'une stricte égalité, nous voulons sélectionner les
données qui répondent à une particularité liée au critère de
sélection...

par exemple : <BOUCLE_abc(ARTICLES) {id_rubrique ?== ^#ENV{id_rubrique}}
Avec ce critère, nous voulons sélectionner toutes les rubriques dont l'id
débute avec l'id_rubrique (nn) présent dans l'environnment d'exécution
de la boucle ; SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique REGEXP '^nn' et s'il n'y a pas d'id_rubrique
dans l'environnement, alors nous ne voulons pas que ce critère soit
utilisé. SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

Attention :

Si pour un critère non conditionnel il est possible d'utiliser une
variable d'environnement de nom quelconque (truc=nn) comme terme de
l'égalité : par exemple <code><BOUCLE_abc(ARTICLES) {id_rubrique =
#ENV{truc}} SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'

AND articles.id_rubrique = nn

pour un critère conditionnel , il est obligatoire d'utiliser une
variable de même nom que le critère.

ainsi <code><BOUCLE_abc(ARTICLES) {id_rubrique ?= #ENV{truc}} ne
fonctionnera pas (le critère sera ignoré) même si truc=nn est défini
dans l'environnement. SELECT articles.titre, articles.lang

FROM spip_articles AS `articles`

WHERE articles.statut = 'publie'