(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'