[ar] [ca] [cpf] [de] [en] [es] [fr] [it]

Ce forum d’entraide est recommandé pour les utilisateurs et utilisatrices occasionnels de SPIP (Système de publication pour l’Internet). Avant de poser une question, faites une recherche sur ce site, consultez les liens utiles. Si vous ne trouvez pas de réponse, postez votre message dans la rubrique appropriée, avec un titre explicite.

Sujets : 24136 Sujets résolus :  39 %

48 visiteurs en ce moment


Accueil > Forums de discussion >  Création de squelettes > NULL dans un critère conditionnel ?=

NULL dans un critère conditionnel ?=

par Optarion - 10 mai 11:35 - Réponse(s) : 8

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 `mots`  
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 !


  • Bonjour,

    les mot clés sont liés à l’article ou au document ?
    le titre en critère correspond au titre du mot clef ou au titre du document ?


  • < #2 > NULL dans un critère conditionnel ?= ˆ
    par Optarion - 11 mai 08:33

    Effectivement, j’ai oublié de mentionner qu’ils sont liés directement aux documents.
    Ainsi, ma boucle <BOUCLE_visual_type(MOTS){id_document}... vérifie que le titre du mot clé est égale au paramètre passé dans l’url, s’il existe (normalement).


    1. {mot.titre ?LIKE #ENV{type_visuel}}

    un truc comme ça donne quoi ?


  • < #4 > NULL dans un critère conditionnel ?= ˆ
    par Optarion - 11 mai 11:50

    Comme prévu, le même résultat qu’avec ?=

    Aucun document qui s’affiche car la requête est conditionnée par AND (mots.titre LIKE NULL)...


  • c’est pas normal... je suppose que vous passez un parametre vide dans l’url type_visuel=
    le plus propre serait de passer un id_mot et de le recuperer avec id_mot ?

    Sinon avec le critère REGEXP mysql peut être ?

    1. {mot.titre == ^(#ENV{type_visuel,'(.*)'})$}

    -> si type_visuel est null prendre tout.. à tester ^


  • < #6 > NULL dans un critère conditionnel ?= ˆ
    par Optarion - 11 mai 14:18

    Non effectivement, ce n’est pas normal.

    J’ai vérifié via var_mode=debug et je n’ai de type_visuel dans aucun environnement.
    Ce qui paraît cohérent avec le fait que la requête SQL teste mot.titre = NULL et non pas mot.titre = "" (la variable existerait mais serait vide).

    Mais à mon sens, le problème n’est pas là. Comme je disais, si je remplace {titre ?= ...} par {type ?= ...}, la requête SQL est la bonne, je n’ai pas de (AND mot.type = NULL).
    Une collision peut être dans la fonction de calcul de la requête peut être ? là, j’avoue que ce n’est pas de mon niveau...

    J’essayerai avec la REGEXP dès que possible. Merci pour votre aide.

    A noter que j’ai réussis à avoir le résultat attendu en passant par des conditions, mais c’est tout dégueux. Je donne ma méthode pour info :

    1. <BOUCLE_visuals(DOCUMENTS){id_article}>
    2. <BOUCLE_visual_type(MOTS){id_document}>
    3. <div class="project-visual[ project-visual-(#TITRE|strtolower)]">
    4. <img src="[(#FICHIER|url_absolue)]"[ alt="(#_visuals:TITRE|textebrut)"]>
    5. </div>
    6. [(#REM) TODO: Ce code dégueux ne devrait pas exister mais un {titre ?= #ENV{type_visuel}} ne marche pas car la requête par défaut cherche les mots clés dont le titre est NULL, alors que le critère devrait être ignoré... A voir si on a une réponse de mon post sur le forum de la communauté http://forum.spip.net/fr_267135.html]
    7. [(#ENV{type_visuel}|is_null|?{
    8. <div class="project-visual[ project-visual-(#TITRE|strtolower)]">
    9. <img src="[(#FICHIER|url_absolue)]"[ alt="(#_visuals:TITRE|textebrut)"]>
    10. </div>,
    11. [(#TITRE|=={#ENV{type_visuel}|ucfirst}|oui)
    12. <div class="project-visual[ project-visual-(#TITRE|strtolower)]">
    13. <img src="[(#FICHIER|url_absolue)]"[ alt="(#_visuals:TITRE|textebrut)"]>
    14. </div>
    15. ]
    16. })]
    17. </BOUCLE_visual_type>
    18. </BOUCLE_visuals>

    Télécharger


  • < #7 > NULL dans un critère conditionnel ?= ˆ
    par Optarion - 15 mai 16:18

    Désolé pour le délai dans mes investigations, j’ai été pas mal pris...

    J’ai testé avec la REGEX avec un {titre = ^(#ENV{type_visuel,'(.*)'})$} et j’ai le même résultat AND (mots.titre = '^(.*)$')...
    J’avoue ne pas être un grand expert des REGEX donc j ne suis pas sûr de mon test.

    J’ai aussi testé en passant un id_mot= comme méthode de filtrage et un {id_mot ?} et là, tout marche comme attendu. Rien d’étonnant là dessus.

    Néanmoins, je reste sur l’idée qu’un type_visuel=desktop est tout de même plus joli qu’un id_mot=16 dans l’url. Donc si je pouvais trouver le moyen de résoudre mon problème initial, ce serait parfait !


  • < #8 NULL dans un critère conditionnel ?= ˆ
    par Optarion - 19 mai 17:13

    Bon... je crois que ce problème restera sans suite malheureusement.

    Merci pour votre aide.




Répondre à la question

« NULL dans un critère conditionnel ?= »

Mots-clés

Vous pouvez étiqueter cette page de forum avec les mots-clés qui vous semblent les plus appropriés ; ils permettront aux prochains visiteurs du site de mieux se repérer :


Installation, mise à jour

Utilisation de l’espace privé

Administration, gestion, configuration du site

Créer ses squelettes

Qui êtes-vous ?