8
Indiquez l’intérêt que vous portez à cette question
0

NULL dans un critère conditionnel ?=

Optarion

Bonjour à tous ;

Des documents sont liés à mes articles, et disposent d’un mot-clé indiquant leur "type" (desktop, mobile, tablet).

Je cherche à afficher, par défaut, tous les documents de article, ou uniquement ceux qui répondent à un filtre passé dans l’url &type_visuel=XXX

J’ai donc une boucle qui va chercher tous les documents de l’article puis à l’intérieur, une boucle sur son mot-clé qui me permet de filtrer via un {titre ?= #ENV{type_visuel}}

<BOUCLE_visuals(DOCUMENTS){id_article}>
	<BOUCLE_visual_type(MOTS){id_document}{titre ?= #ENV{type_visuel}}>
	<div class="project-visual[ project-visual-(#TITRE|strtolower)]">
		<img src="[(#FICHIER|url_absolue)]"[ alt="(#_visuals:TITRE|textebrut)"]>
	</div>
	</BOUCLE_visual_type>
</BOUCLE_visuals>

Si je passe un filtre à l’url, tout se passe bien et seul les documents qui répondent au filtre sont affichés. Mais si je n’ai pas de #ENVtype_visuel, rien ne s’affiche.

Le var_mode=debug me permet de voir que la requête SQL ne renvoi aucun résultat car cible les articles dont le titre est NULL.
Pourtant, le critère {titre ?= ...} devrait être totalement ignoré puisque je n’ai aucun #ENV{type_visuel}

SELECT mots.type
FROM spip_mots AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bW90czwvY29kZT4="></span>  
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )
WHERE (L1.id_objet = 4)
	AND (L1.objet = 'document')
	AND (mots.titre = NULL)

A noter que si je fais un teste avec {type ?= #ENV{type_visuel}} alors le comportement est le bon (pas de AND (mots.type = NULL)) dans la requête SQL...

Bref, je suis un peu perdu.

Toute idée est bienvenue !