[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 : 24073 Sujets résolus :  39 %

69 visiteurs en ce moment


Accueil > Forums de discussion >  Création de squelettes > Afficher les objets ayant tous les critères

Afficher les objets ayant tous les critères

par aleks - 21 mars 2012 20:45 - Réponse(s) : 11

Bonjour,

Je cherche à afficher les résultats d’une boucle correspondant à tous les critères (genre d’opérateur ET logique). Typiquement :

  • Afficher les articles ayant tous les mots-clefs

... et, c’est bête, mais pas moyen !

<BOUCLE_a(ARTICLES) {id_mot IN 1,2}> me sort les articles qui ont soit le mot 1 soit le mot 2. Moi je voudrais les articles qui ont 1&2 (donc).

alors un <BOUCLE_b(ARTICLES){id_mot=1}{id_mot=2}> fonctionne. Mais je vois mal comment je peux coder ça si mes mots sont dans un array (GET ou ENV).

J’avais vu traîner un sujet là-dessus il y a quelques temps, mais j’ai eu beau retourner le forum dans tous les sens, pas moyen de remettre la main dessus...

Help ?


  • Bonsoir

    Alors peut-être que je connais...mais désolé pas d’exemples sous la main et pas essayé..

    Il vous faut peut-être écrire <BOUCLE_a(ARTICLES) {id_mot IN !(!1,!2)}>c’est du booléen !.
    ou autre chose de similaire en gardant l’idée :

    Une somme ou "OU" complémentée d’arguments complémentés est égale à un "ET" entre les 2 arguments.
    En espérant que spip réagisse bien là-dessus...? ..


  • <BOUCLE_a(ARTICLES) {id_mot !={id_mot!={1},id_mot!={2}}}>

     ?


  • Malheureusement pas !

    Vu que {id_mot==^(1|2)$} fonctionne pour un OU (équivalent de IN), j’ai tenté également {id_mot==^(1&2)$}pour faire un ET, sans succès...

    Merci pour ton aide


  • C’est un peu tordu, mais en faisant un tableau des mots-clés non désirés, à utiliser comme critère pour exclure ces mots de la sélection :

    mettons que la liste des mots soit obtenue par #GET{mots} :

    1. #SET{exclus,#ARRAY}
    2. <BOUCLE_exclus(MOTS)>
    3. [(#GET{mots}|find{#ID_MOT}|non)
    4. #SET{exclus,#GET{exclus}|push{#ID_MOT}}
    5. ]
    6. </BOUCLE_exclus>
    7.  
    8. <BOUCLE_a(ARTICLES) {id_mot !IN #GET{exclus}}>
    9. ...
    10. </BOUCLE_a>

    Télécharger

    Bon c’est un peu capillo-tracté, une bonne petite expression régulière serait une solution plus élégante.


  • Merci !

    Mais j’ai un peu de mal à suivre... :D

    En supposant que mon article A est lié à une dizaine de mots (de id_mot= 1 à 10 pour faire simple). Si je recherche les articles liés aux mots clefs 1 & 2, la boucle devrait m’afficher l’article A.

    Mais j’ai l’impression que ton #GET{exclus} va me squizzer mes mots 3 à 10 ! Et du coup me zapper l’article A des résultats... Je me trompe ?


  • Ah oui, j’ai fait quelques essais chez moi : résultats farfelus. Soit j’ai fait une erreur de syntaxe, soit c’est le principe qui est mauvais.

    Bon, il y aura bien un pro des expressions régulières pour te dépanner !


  • Le plugin critère mots apporte une solution en introduisant un nouveau critère {mots_selon_id}, spécifique aux mots clefs et aux articles.

    Demeure toujours la question pour transposer ça aux objets en général. Donc pouvoir faire un ET dynamique dans une requête...

    Et s’il y a du pro de l’expression régulière qui passe par là...


  • Basiquement, je voudrais pouvoir générer dynamiquement ce genre de requête :

    critere=xx
    AND critere=yy
    AND critere=zz
    etc.

    Mais dans une boucle, je ne vois pas comment faire...


  • C’est vraiment tarabiscoté, et surtout je n’ai aucune idée de la gourmandise de cette boucle, mais ça semblerait marcher :

    • S’il y a plusieurs critères dans l’environnement, on trie dans notre table selon les différents critères et on repère les doublons :
      1. <BOUCLE_criteres(CONDITION){si #ENV{critere}|count|>{1}}>
      2. <BOUCLE_a(TABLE)>
      3. [(#SET{critere,[(#ENV{critere}|table_valeur{#COMPTEUR_BOUCLE|moins{1}})]})]
      4. <BOUCLE_b(TABLE){critere=#GET{critere}}>
      5. [(#GET{doublon}|find{#ID_CHAMP}|oui)#SET_PUSH{resultats,#ID_CHAMP}]<br />
      6. #SET_PUSH{doublon,#ID_CHAMP}
      7. </BOUCLE_b>
      8. </BOUCLE_a>

      Télécharger

    • Puis on affiche les résultats :
      1. <BOUCLE_resultats(TABLE){id_champ IN #GET{resultats}}{autres critères...}>
      2. #TITRE etc.
      3. </BOUCLE_resultats>
      4. </BOUCLE_criteres>

      Télécharger

    • Si un seul critere on affiche directement les résultats :
    1. <BOUCLE_critere(CONDITION){si #ENV{critere}|count|=={1}}>
    2. <BOUCLE_c(TABLE){critere=#ENV{critere}}{autres critères...}>
    3. #TITRE etc.
    4. </BOUCLE_c>
    5. </BOUCLE_critere>

    Télécharger

    S’il y a mieux, je suis très preneur !


  • Bonsoir,

    Je tente ma chance :

    1. <BOUCLE_test(MOTS) {id_mot IN #GET{mots}} {id_article} {doublons}>
    2. </BOUCLE_test>
    3.  
    4. <BOUCLE_afficher(MOTS) {id_mot IN #GET{mots}} {doublons}>
    5. </BOUCLE_afficher>
    6. Cette partie s'affiche si l'article n'est pas associé à tous les mots contenus dans l'array.
    7. </B_afficher>
    8. Cette partie s'affiche si l'article est associé à tous les mots.
    9. <//B_afficher>

    Télécharger

    Je n’ai pas testé... Je serais curieux de savoir si ça passe !


  • D’ailleurs, l’expression régulière semble difficilement possible : les regex des boucles interrogent les champs sql un à un, non ? Ca expliquerait que le "AND" ne fonctionne pas.

    (je dis une bêtise ?)




Répondre à la question

« Afficher les objets ayant tous les critères »

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 ?

  • Exécution de #SET dans une boucle

    par Z_spip
    26 juin 23:22

    Réponse(s) : 3

    Bonsoir bonsoir, Si ça pet aider à comprendre le souci, mes essais sont là : http://www.routedesstages.lautre.net/cn/spip.php?rubrique3 La couleur de la puce et de la flèche "lire la suite" de (...)

  • fichier langue et code html

    par placido
    26 juin 15:24

    Résolu - Réponse(s) : 4

    Les fichiers de langue se trouvent dans un dossier lang/ dans les différents répertoires qui composent le chemin (path) de SPIP. Lire cette documentation et les pages suivantes pour plus (...)

  • inclure du PHP dans un squelette qui fonctionne sans recalcul de la page

    par philippe
    25 juin 23:59

    Pas de réponse

    Bonjour Sur le site que je programme, les futurs rédacteurs ont la possibilité de changer les arrière-plans CSS en chargeant des images. J’ai fait une fonction php stockée dans mes_fonctions.php qui (...)

  • #TITRE + du texte en dur

    par Chrys
    25 juin 16:21

    Résolu - Réponse(s) : 2

    Merci Fa_b, j’ai opté pour ta seconde proposition. Elle fonctionne très bien, et c’est une condition que je trouve plus simple a lire. Merci

  • Récupérer toutes les valeurs d'un champ select multiple CVT dans un array

    par orava
    24 juin 12:02

    Résolu - Réponse(s) : 1

    Okay je me sens bête (on va mettre ça sur le compte de la canicule qui a frit mon cerveau) Bref je mets la soluce là pour ceux que ça intéresse, il suffisait tout bêtement de rajouter des crochets à (...)

  • Problème de sitemap avec SPIP 3

    par benolaos
    23 juin 07:33

    Résolu - Réponse(s) : 22

    Il semble que finalement le sitemap.xml fonctionne, mais ne s’affiche pas comme avant (peut-être dû à une feuille de style...). Désolé pour le bruit.

  • pb spip/spipr et test robots google

    par Didine
    22 juin 10:50

    Résolu - Réponse(s) : 6

    J’ai testé une première fois et j’ai vidé le cache de spip et ça fonctionne maintenant :) Merci beaucoup pour ton aide.

  • SPIP ecommerce

    21 juin 15:16

    Résolu - Réponse(s) : 6

    Bises.

  • boucle DATA et filtrage avec un critère optionnel

    21 juin 17:48

    Pas de réponse

    Bonjour, je tente d’afficher des données récupérées avec la boucle data. J’aimerais utiliser le filtrage avec un critère optionnel passé en paramètre comme ceci par exemple : <BOUCLE_exemple(DATA) (...)

  • Rubriques

    18 juin 08:26

    Réponse(s) : 4

    Bonjour, J’ai mis du temps à te répondre j’ai fais plusieurs essais et je n’y arrive pas, pour les patronymes c’est bon j’utilise une sous rubrique dans la rubrique "généalogie" mais pour un article (...)

  • Messages : 29282
  • 8190 43 %
  • Poser une nouvelle question