Plugin « Critère {mots} »

Permettre de sélectionner facilement des objets SPIP ayant un ou des mots clefs en communs.

Présentation

Il peut arriver parfois de vouloir sélectionner des objets SPIP (articles, rubriques, sites etc.), ayant un certains nombre de mot clefs communs.

Par exemple, je voudrais sélectionner les articles ayant les mots clefs « fruits » et « desserts », mais pas ceux qui n’ont que « desserts » ou que « fruits ».

Une telle opération, bien que possible, est assez difficile en SPIP ... sauf si vous utilisez ce plugin.

Il s’installe comme n’importe quel plugin.

Il propose trois critères :
-  {mots}
-  {mots_selon_id}
-  {mots_selon_titre}

Dans une boucle, il ne faut utiliser qu’un seul de ces critères.

Le critère {mots}

Prenons un exemple :

<BOUCLE_art(ARTICLES){mots}>
#TITRE
</BOUCLE_art>

Cette boucle sélectionnera les articles ayant tous les mots clefs passés en paramètres d’environnement dans un tableau « mots ».

Comment passer ces mots-clefs en paramètres d’environnement ?

Typiquement, sur une page principale (non incluse), via des paramètres dans l’url. Par exemple : http://www.toto.fr/?page=toto&amp;mots[0]=1&amp;mots[1]=2.

Ici, j’ai passé dans le tableau ’mots’ les valeurs 1 et 2. Les articles associés, à la fois au mot dont l’id est 1 et à celui dont l’id est 2 seront sélectionnés [1].

Les valeurs du tableau ’mots’ peuvent être des identifiants de mots (1, 2) ou des titres de mots (« fruits », « desserts »).

Attention au cas où des mots clefs sont uniquement sous forme de nombre ...

Le critère {mots_selon_id}

Il fonctionne exactement comme le critère {mots}, à ceci près que les valeurs du tableau ’mots’ sont forcément des identifiants de mots (1,2).

Le critère {mots_selon_titre}

Il fonctionne exactement comme le critère {mots}, à ceci près que les valeurs du tableau ’mots’ sont forcément des titres de mots (« fruits »,« desserts »).

Les paramètres supplémentaires

Les trois critères {mots},{mots_selon_id} et {mots_selon_titre} peuvent prendre trois paramètres : ’score’, ’tableau’, ’tri’. Sous la forme {mots score tableau}.

Le paramètre ’score’.

Par défaut, le critère {mots} prend les objets ayant tous les mots passés en paramètre. On peut décider de vouloir prendre ceux ayant au moins un certain nombre de mots passés paramètre, mais pas nécessairement tous. C’est à cela que sert le paramètre ’score’.

-  Si score est compris entre 0 et 1 (exclus), alors SPIP sélectionnera les objets ayant au moins ce pourcentage de mots [2] sur le total des mots passés en paramètre. Par exemple si j’écris {mots 0.5}, et que je passe 10 mots en paramètre, alors SPIP sélectionnera les objets ayant au moins 10*0.5 = 5 des mots passés en paramètre.
-  Si score est supérieur ou égale à 1 et suivi du signe « % », alors SPIP sélectionnera les objets ayant au moins ce pourcentage sur le total des mots passés en paramètre. Par exemple si j’écris {mots 50%}, et que je passe 10 mots en paramètre, alors SPIP sélectionnera les objets ayant au moins 50% de 10 = 5 des mots passés en paramètre.
-  Si score est supérieur ou égale à 1, mais n’est pas suivi du signe « % », alors SPIP sélectionnera les objets ayant au moins ’score’ mots passés en paramètres. Par exemple {mots 5} sélectionnera les objets ayant au moins 5 mots passés en paramètre.

Le paramètre ’tableau’.

Par défaut, SPIP prend comme tableau la variable d’environnement ’mots’. Mais on peut lui dire, via ce paramètre, de prendre un autre tableau.

Ce peut être un tableau :
-  calculé via #GET et #SET
-  inscrit en dur via #ARRAY
-  passé en variable d’environnement, et appelé via #ENV.

Ex : {mots 100% #ARRAY{0,2,1,1}} sélectionnera les objets ayant les mots clefs 2 et 1. Notez qu’il est obligatoire de donner une valeur au paramètre ’score’ pour utiliser ’tableau’, sinon SPIP les confond.

Le paramètre ’tri’

Ce paramètre, existant depuis la version 2.1 (sous SPIP 3) ou 1.3 (sous SPIP 2.1 et 2.0) peut prendre deux valeurs :
-  tri pour trier la boucle en fonction du nombre de mots du tableau associés, en commençant par le plus petit nombre.
-  !tri pour trier la boucle en fonction du nombre de mots du tableau associés, en commençant par le plus grand nombre.

Exemple  :

L’article 1 est associé aux mots 1,2,3 ; l’article 2 est associé aux mots 2,3,4,5,6.

{mots 2 #LISTE{1,2,3} !tri} affichera d’abord l’article 1, puis l’article 2.
En effet, l’article 1 est associé à 3 mots dans la liste (1,2,3), tandis que l’article 2 n’est associé qu’à 2 mots dans la liste (2,3).

Formulaire de sélection

Avec la version 1.1 de ce plugin, une nouvelle possibilité s’offre à vous : faire appel à un formulaire bâtissant pour vous les critères dans l’url pour filtrer selon plusieurs mots clefs.

Connecté en tant que webmestre, vous pouvez tester avec la page de démonstration : /?page=demo/parmots.

Le formulaire présente dans un premier temps la liste de vos groupes de mots clefs.

Dès que vous en choisissez un dans la liste, automatiquement [3], la liste des mots clefs de ce groupe est affichée juste à côté.

Choisissez un mot clef, et ce dernier et ajouté à l’URL pour ne vous présenter que les articles ayant ce mot clef.

Et le processus peut être répété autant de fois que nécessaire.

Bonus : la liste des mots clefs déjà choisis est affichée sous le formulaire. Chaque mot est cliquable. Un clic le supprime de l’URL et de la liste.

Le formulaire critère mots en action

Usage du formulaire

-  Sur une seule page

  • en affichant tous les groupes de mots :
    <div class="ajax">
    [(#FORMULAIRE_RECHERCHE_PAR_MOTS)]
    </div>
  • en n’affichant que certains groupes de mots :
    #SET{FiltreGroupes,#ARRAY}
    <BOUCLE_FiltreGroupes(GROUPES_MOTS){titre==^[^_]}>
    #SET{FiltreGroupes,
           #GET{FiltreGroupes}|push{#ID_GROUPE}}
    </BOUCLE_FiltreGroupes>
    <div class="ajax">
    [(#FORMULAIRE_RECHERCHE_PAR_MOTS{#GET{FiltreGroupes}})]
    </div>

    Ici, on a choisi de ne pas afficher les groupes de mots commençants par « _ ».

-  On peut aussi utiliser le formulaire sur toute les pages du site pour renvoyer sur une page de résultats :

[(#FORMULAIRE_RECHERCHE_PAR_MOTS{'',#URL_PAGE{pagederesultats}})]

NB :

  • le premier paramètre est un tableau d’identifiants de groupes, ou la chaine vide
  • le deuxième paramètre est l’URL de la page qui affiche les résultats.

Usage avec le plugin Mots arborescents

Par défaut, seul le mot-clé demandé est recherché.

Mais il est possible de trouver via n’importe quel mot-clé de la branche du mot-clé demandé en mettant dans mes_options.php :

if (!defined('_CRITERE_MOTS_ARBO_BRANCHE'))
    define('_CRITERE_MOTS_ARBO_BRANCHE', true); 

Notes

[1Pour des pages incluses, il suffit de passer {mots} comme paramètre d’inclusion.

[2Car un nombre entre 0 et 1 est un pourcentage

[3Si vous n’avez pas désactivé javascript

NOTA SPIP branche 2.*

Attention : la partie formulaire de ce plugin ne fonctionnera pas avec la version 2.0.10 de SPIP. Il faut :

On pourra utiliser le plugin pour, par exemple afficher les articles connexes.

Discussion

74 discussions

  • Le dernier script convient parfaitement à l’affichage des mots-clés que je souhaitais. Grâce à «  id_mot IN #ENVmots> »...

    Bravo pour ce plugin très intéressant que je réemploierai souvent et merci pour votre aide.

    Répondre à ce message

  • 1

    En effet, de même que l’affichage des articles trouvés grâce à la sélection des mots-clés dans le formulaire, peut-on lister ces derniers et les afficher en même temps que les résultats ?

    Ex : http://www.midi-pyrenees.ecologie.gouv.fr/spip.php?page=rubrique&id_rubrique=341

    Là je sèche un peu...

    • ben j’ai mis ce qu’il faut non ?

      <BOUCLE_mots(MOTS){id_mot IN #ENV{mots}}>
      #TITRE
      </BOUCLE_mots>

    Répondre à ce message

  • 1

    Merci pour cet éclaircissement. Effectivement, cela fonctionne !

    Voici le code utilisé pour récupérer ces mots-clés pour l’affichage des articles concernés :

    <B_articles>
    <ul>
    #SET{mots, #ARRAY}
    <BOUCLE_articles(ARTICLES){mots}{pagination 10}>
    <li><a href="#URL_ARTICLE">#SET{mots,[(#GET{mots}|foreach)]#TITRE XXX</a></li>
    </BOUCLE_articles>
    </ul>
    </div>
    </B_articles>

    Par contre, je sèche sur l’affichage simple de ces mots-clés...

    Une idée ?

    • qu’entendais vous par « affichae simple de ces mot clef » ? juste les lister ?

      <BOUCLE_mots(MOTS){id_mot IN #ENV{mots}}>
      #TITRE
      </BOUCLE_mots>

    Répondre à ce message

  • Juste une rectification du bout de code (sans pagination) :

    <B_articles>
    <ul>
    #SET{mots, #ARRAY}
    <BOUCLE_articles(ARTICLES){mots}>
    <li><a href="#URL_ARTICLE">#SET{mots,[(#GET{mots}|foreach)]#TITRE XXX</a></li>
    </BOUCLE_articles>
    </ul>
    </div>
    </B_articles>

    Répondre à ce message

  • 2

    Bonjour,

    J’ai un formulaire composé de 3 listes de groupes de mots-clés , chaque liste ayant ses mots-clés. Je souhaite obtenir les articles ayant au moins un mot-clé de chaque liste. Ce formulaire ne fonctionne qu’avec la dernière sélection et non les trois.

    ex :

    <B_mots>
    <form method="post" name="mot"  action="spip.php?page=mot">
    <div>
    <label for="zone">Choisir une zone :</label>
    <br />
    <select name="id_mot">
    <BOUCLE_mots4(MOTS) {type=zone}>
    <option value="#ID_MOT">#TITRE</option>
    </BOUCLE_mots4>
    </select>
    </div>
    <div>
    <label for="zone">Choisir un centre :</label>
    <br />
    <select name="id_mot">
    <BOUCLE_mots5(MOTS) {type=centre}>
    <option value="#ID_MOT">#TITRE</option>
    </BOUCLE_mots5>
    </select>
    </div>
    <div>
    <label for="zone">Choisir une formation :</label>
    <br />
    <select name="id_mot">
    <BOUCLE_mots6(MOTS) {type=formations}>
    <option value="#ID_MOT">#TITRE</option>
    </BOUCLE_mots6>
    </select>
    </div>
    <input type="submit" value="Submit" name="ok">
    </form>
    </B_mots>

    Comment récupérer les choix de mots-clés des 3 listes dans mon formulaire pour une recherche multi-critère ?

    Merci de votre aide.

    • bonjour,
      il est assez logique que cela ne fonctionne qu’avec le dernier mot, étant donné que chaque select renvoie une valeur pour « id_mot ».

      En fait il faut que votre formulaire renvoi un tableau contenant les valeurs des listes. Pour cela, il suffit de mettre les clefs (=entrée) du tableau entre crochet.

      Ce qui donne

      <B_mots>
      <form method="post" name="mot"  action="spip.php?page=mot">
      <div>
      <label for="zone">Choisir une zone :</label>
      <br />
      <select name="id_mot[0]">
      <BOUCLE_mots4(MOTS) {type=zone}>
      <option value="#ID_MOT">#TITRE</option>
      </BOUCLE_mots4>
      </select>
      </div>
      <div>
      <label for="zone">Choisir un centre :</label>
      <br />
      <select name="id_mot[1]">
      <BOUCLE_mots5(MOTS) {type=centre}>
      <option value="#ID_MOT">#TITRE</option>
      </BOUCLE_mots5>
      </select>
      </div>
      <div>
      <label for="zone">Choisir une formation :</label>
      <br />
      <select name="id_mot[2]">
      <BOUCLE_mots6(MOTS) {type=formations}>
      <option value="#ID_MOT">#TITRE</option>
      </BOUCLE_mots6>
      </select>
      </div>
      <input type="submit" value="Submit" name="ok">
      </form>
      </B_mots>
    • par ailleur, pour que la recherche multi critères fonctionne bien, il faudrait que vous remplaciez dans le code que je vous ai fourni

      -  id_mot[0] par mots[0]
      -  id_mot[1] par mots[1]
      etc, etc.

    Répondre à ce message

  • 10

    Bonjour,
    je veux utiliser votre plugin, seulement j’ai une erreur...
    J’ai une page avec des listes déroulantes et une page de résultat.
    L’envoi des id des mots clé est bien passé d’une page à l’autre( /spip.php ?page=recherche2&recherche=test&mots[0]=9&mots[1]=1&mots[2]=16&mots[3]=4 ) mais une fois sur ma page de résultat, j’ai cete erreur :

    Erreur(s) dans le squelette
    <BOUCLE_articles1>()
    Erreur SQL
    articles.id_article, articles.popularite, articles.titre, articles.date, articles.lang FROM spip_articles AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YXJ0aWNsZXM8L2NvZGU+"></span> WHERE (articles.statut = 'publie') AND (articles.date < '9999-12-31') AND articles.id_article IN ( SELECT id_article FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcGNvbnQ8L2NvZGU+"></span>.spip_mots_articles WHERE id_mot=9 OR id_mot=1 OR id_mot=16 OR id_mot=4 GROUP BY id_article HAVING SUM(1) >= 4 ) ORDER BY articles.popularite DESC
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id_article FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bGNtczwvY29kZT4="></span>.spip_mots_articles WHERE id_mot=9
    </BOUCLE_articles1> 

    La boucle sur ma page de résultat est la suivante :

    <BOUCLE_articles1(ARTICLES){mots} {par popularite}{inverse} {pagination 10}>
              <li>
              <h3><a href="#URL_ARTICLE">#TITRE</a></h3>
              <small>[(#DATE|affdate_jourcourt)][, <:par_auteur:> (#LESAUTEURS)]</small></li>
            </BOUCLE_articles1>
    		     </ul>

    En passant par le « calcul » du debug, j’ai cette erreur lors de la requete sur l’id_rubrique :
    Comment        Impossible WHERE noticed after reading const tables

    Voilà, si vous avez une idée, merci d’avance ;)
    Je ne vois pas où peut être le problème...

    • Pour info, j’utilise la version 2.0.10 de spip

    • avez vous autre choses ? pouvez vous regarder avec phpmyadmin a quoi correspon ce spipcont ? avez vous modifié des constante de spip ?

    • ps : j’ai testé en local et n’ai pas de pb. donc je me dis que peut-être votre conf de spip est différente. mais où ?

    • J’ai désactivé tout les plugins sauf celui-ci, et cela ne fonctionne pas mieux...
      Mon Type d’adresses URL est « page — spip.php ?article12 »

      Sinon je n’ai malheureusement pas accès a la BDD... mais en refaisant des test je ne vois plus ce « spipcont »... étrange, il venait d’ou ?! :)

      C’est peut etre mon formulaire de recherche qui a un problème... je l’ai copier ici : http://tinypaste.com/36f91

    • hum, qu’obtenez vous alors comme message ? si vous n’avez plus ce spip-cont.

    • MSG EDITE (mauvais copier coller) :

      URL : spip.php ?page=recherche2&recherche=test&mots[0]=9&mots[1]=14&mots[2]=19&mots[3]=12&var_mode=recalcul

      Edit : bizarre il a l’air de rajouter ici le spipcont ... voici mon résultat en bas : http://tinypaste.com/7b359

    • et bien il y est tjr le ’spipcont’

    • J’ai modifié mon message précédent pour coller le texte (il rajoutait ici le spipcont... bizarre...)
      J’ai pu acceder a la BDD... j’ai phpMyAdmin 2.6.4-pl3 et MySQL 4.0.2...

      Quand je passe par débug, et resultat sur la boucle articlemots, il me mets cette requete que j’execute directement dans phpmyadmin et donne cette erreur : http://tinypaste.com/32c6a

    • hum, je ne suis pas un spécialiste de MySQL, mais je soupçonne une version trop veille de Mysql.

      Peut tu tester en local avec une version récent ?( par exemple mon MAMP me donne une version 5)

      ps : pour le pastebin, utilise plutot http://spip.pastebin.fr ou http://spip.pastebin.com

    • Effectivement, en local cela a l’air de marcher...

      Version du client MySQL : mysqlnd 5.0.5-dev - 081106 - $Revision : 1.3.2.27 $

      bon bah on sait d’où ca vient...
      merci de ta patience et de ton aide :)

    Répondre à ce message

  • 2

    Est ce que ce critère peut servir à réaliser un formulaire de recherche multicritères ?
    Je m’explique : j’ai sur mon site http://www.ag-immocote-ouest.com/ un formulaire de recherche qui permet aux visiteurs de lancer une recherche qui permet d’afficher tous les articles qui ont comme mots clé les choix des listes déroulantes du formulaire sélectionnés par le visiteur

    voilà le formulaire de recherche :

    <form  method="GET" >
    			<p class="choi"> 
                            <input type="hidden" name="page" value="recherche" >
                            
                            
                            
                           
                         <select name="id_mot1" style="display: block; float: left; width:200px">
                                    <option  selected="selected">-- Choix de transaction</option>
                                    <BOUCLE_transaction(MOTS){id_groupe=1}>
                                    <option value="#ID_MOT" [(#ENV{id_mot1}|=={#ID_MOT})]> #TITRE</option>
                                    </BOUCLE_transaction>
                            </select>
                            <select name="id_mot4" style="display: block; float: left; width:200px">
                                    <option selected="selected">-- Choix du type </option>
                                    <BOUCLE_typebien(MOTS){id_groupe=4}{par titre}>
                                    <option value="#ID_MOT" [(#ENV{id_mot4}|=={#ID_MOT})]> #TITRE</option>
                                    </BOUCLE_typebien>
                            </select>
                            <select name="id_mot3" style="display: block; float: left; width:200px">
                                    <option selected="selected">-- Choix de la région</option>
                                    <BOUCLE_region(MOTS){id_groupe=3}>
                                    <option value="#ID_MOT" [(#ENV{id_mot3}|=={#ID_MOT})]> #TITRE</option>
                                    </BOUCLE_region>
                            </select>
    						
    						<select name="id_mot2" style="display: block; float: left; width:200px">
                                    <option selected="selected">-- Choix du quartier</option>
                                    <BOUCLE_quartier(MOTS){id_groupe=2}>
                                    <option value="#ID_MOT" [(#ENV{id_mot2}|=={#ID_MOT})]> #TITRE</option>
                                    </BOUCLE_quartier>
                            </select>
    						
    						</p>
    						 <p class="lancrchrch">
                               <input type="hidden" name="lang" value="#LANG" >
                          
                    <input  type="image" value="submit" src="squelettes/images/lance_rcherch_137_25.gif" />
    				<input  type="image" value="reset" src="squelettes/images/annuler_recherch_136_25.gif" />
                </p>
                            </form>

    Répondre à ce message

  • 6

    {mots_selon_titre 50% ARRAY{'fruits', 'dessert'}}

    devrait convenir

    • Bonjour,

      Sur le canal irc, j’ai fait part de mes difficultés à utiliser correctement le plugin « critière{mots} ». Je remercie les personnes qui m’ont aidé jusque là.

      Mon but est d’afficher, sur une page « rubrique.html » et « mot.html », deux listes de mots-clés provenant de deux groupes distincts (« fruits » et « couleurs »).

      Ces listes s’affiches sous forme de <ul> <li> ne devrait idéalement pas être des listes déroulantes formulaires.

      Voici un bon exemple de ce que je recherche à faire : lien.

      Mon but est de pouvoir cliquer sur mot-clé (ex. fraise) pour afficher tous les articles associés à ce mot-clé. Ensuite, j’aimerais avoir la possibilité de cliquer sur le mot clé d’une autre liste (ex. rouge) pour filtrer les articles selon ces 2 mots-clés.

      La grande question, comment m’y prendre. Voici ce que j’ai déjà fait jusque là.

      Voici ce que contient ma page « mot.html ». En gros, il y a 2 inclure pour le fichier contenant les 2 listes de mots clés et pour la page contenant les articles :

            
      <div class="filter">
              [(#REM) include du filtre]
              [(#INCLURE{fond=inc_filtre})] 
            </div>
            <div class="resultat ajax">
              [(#REM) include de la liste des articles ]
              [(#INCLURE{fond=inc_rubrique}{id_mot})] 
            </div>

      Voici le contenu de l’inclure « inc_filtre.html » :

      <div>
        <ul id="fruits">
          <BOUCLE_viewall1(MOTS){id_rubrique=1}>
          <li><a href="#URL_MOT">all clients</a>
          </BOUCLE_viewall1>
          <BOUCLE_filtre1(MOTS){id_groupe=1}>
            <ul>
              <li><a href="#URL_MOT" [ class="(#EXPOSE)"]>#TITRE</a></li>
            </ul>
          </li>
          </BOUCLE_filtre1>
        </ul>
      </div>
      
      <div class="couleurs">
          <BOUCLE_viewall2(MOTS){id_rubrique=2}>
          <li><a href="#URL_MOT">all clients</a>
          </BOUCLE_viewall2>
          <BOUCLE_filtre2(MOTS){id_groupe=2}>
            <ul>
              <li><a href="#URL_MOT" [ class="(#EXPOSE)"]>#TITRE</a></li>
            </ul>
          </li>
          </BOUCLE_filtre2>
        </ul>
      </div>

      et ce que contient « inc_rubrique.html » :

              
      <BOUCLE_resultat(ARTICLES){id_mot}>
                <div class="grid-4 alpha portfolio">
                  <a href="#URL_ARTICLE">
                    <BOUCLE_thumbnail(DOCUMENTS){id_article}
      {extension==jpg|png|gif}{par num titre}{par date}{0,1}>
                      [(#FICHIER|copie_locale|image_reduire{250,0}|
      image_recadre{220,145}|
      inserer_attribut{alt,[(#TITRE|couper{80}|texte_backend)]})]
                    </BOUCLE_thumbnail>
                    <h1>/ #TITRE /</h1>
                  </a>
                </div>
      </BOUCLE_resultat>

      Je sais que pour utiliser le plugin critèremots, je dois d’abord récupérer dynamiquement les mots-clés dans un ou deux tableaux. J’ai a cet effet écrit le code suivant :

        	  #SET{keywords_table, #ARRAY}
      			<BOUCLE_filtre10(MOTS){id_groupe=1}>
      			  #SET{keywords_table, #GET{keywords_table}|push{#ID_MOT}}
      			</BOUCLE_filtre10>
      			[(#GET{keywords_table}|foreach)]

      Mon problème, c’est qu’ensuite je n’ai pas compris comment reprendre les infos du tableau.

      Bref, je suis un peu perdu et d’avance je m’excuse pour mon incompétence. Mais je suis prêt à en apprendre plus sur spip (notamment #ENV, #GET et #ARRAY). Si qqn peux m’expliquer par étapes ce que je dois faire, ce serait d’une grande aide.

      Merci !!!

    • heu attend c’est un plus simple. en gros, il faut que tu file à ton url de page d’affichage des objets selon les mot les id des mots. Sous la forme

      ?rubriquexxx&mots[0]=1&mots[1]=3

      Par exemple tu fait les boucles suivants :

      <BOUCLE_groupe(GROUPES_MOTS)>
      #TITRE
      
      <B_mot>
      <ul>
      <BOUCLE_mot(MOTS){id_groupe}>
      <li><a href="[(#SELF|parametre_url{mots&#091;#_groupe:COMPTEUR_BOUCLE&#093;,#ID_MOT})]">#TITRE</a>
      </li>
      </BOUCLE_mot>
      </ul>
      </B_mot>
      
      </BOUCLE_groupe>
      
      
      <B_article>
      <B_mot_art>
      Les articles associés aux mots 
      <BOUCLE_mot_art(MOTS){id_mot==(#ENV{mots}|implode{|})}{','}>
      « #TITRE »
      </BOUCLE_mot_art>
      <BOUCLE_article(ARTICLES){mots}>
      <li>#TITRE</li>
      </BOUCLE_article>
      </B_article>

      testé en local, cela devrait marcher.

      Si tu n’arrive pas a analyser les boucle, dit le moi ...

    • Tout d’abord, merci bcp pour votre réponse :-) !!! Elle m’a été utile.
      J’ai tout de même des questions.

      D’abord, est-ce normal que mon url n’affiche rien dans les crochets[] ? J’ai l’impression que le #COMPTEUR_BOUCLE n’est pas pris en compte. Et quelle est l’utilité du « | » après l’implode dans implode{|} ?

      Deuxièmement, mon objectif est d’afficher des articles avec 1 ou 2 mots-clefs max. Dans ce cas, si je clique sur « fraise » + « rouge », cela m’affiche 0, 1 ou plusieurs articles. Comment faire pour que lorsque je clique, par la suite sur « poire » (dans ma première liste de mots-clefs), l’url se modifie pour supprimer la valeur de « fraise » et la remplace avec celle de « poire » ? En bref, de ?rubriquexxx&mots[0]=1&mots[1]=3 à ?rubriquexxx&mots[0]=2&mots[1]=3 sans rajouter un nouveau &mots[2]=5 dans url ?

      Merci pour votre aide. J’ai honte de vous en demander autant, mais c’est aussi l’occasion pour moi d’aller plus loin dans les boucles spip. Malheureusement, mes tentatives sont souvent infructueuses, d’où mes questions.

    • Pour le #COMPTEUR_BOUCLE, j’ai compris d’où provenait le problème. J’ai modifié le code que vous m’avez transmis et je n’avais pas retiré le « _groupe : » de #_groupe:COMPTEUR_BOUCLE.

      Par contre, pour le reste, je suis tjs coincé...

    • si jamais, j’ai écrit un post sur le forum : http://forum.spip.org/fr_220400.html
      ce sera certainement plus simple. désolé pour tous ces mails.

    • -  le | dans le implode sert à transformer le tableau en quelquechose de la forme 1|2, pour faire ensuite un test dessus. Mais je me suis tromper dans le test, il vaut mieux mettre {id_mot IN #ENV{mots}}
      -  pour le reste, c’est un pb de gestion des crochets dans la compilation de SPIP. J’ai vu que denisb t’a donné une réponse-> prend la. En gros, plutot que de faire un tableau unique, il faut plusieur tableau qu’il fusionne.

    Répondre à ce message

  • 3

    J’ai qq soucis à comprendre le fonctionnement de ce plugin. Mon but est d’afficher 2 listes de mot-clés. L’un à comme nom de groupe « fruits » et l’autre « couleurs ». En choisissant un mot-clé, par ex. poire, cela renvoie à une page mot.html affichant les articles contenant le mot-clé « poire ». Depuis cette même page, j’aimerais pouvoir sélectionner un 2e mot-clé d’une 2e liste, par ex. « vert ». Ainsi, la page mot.html devrait afficher les articles contenant les mots-clés « poire » et « vert ».
    J’ai écrit une boucle dans un fichier inculde contenant les 2 boucles permettant d’afficher les (2) listes de mot-clés. : et

    Sur la page mot.html, j’ai inscrit la boucle <BOUCLE_resultat(ARTICLES)mots. Or, aucun article ne s’affiche. Je dois certainement manquer une étape et/ou mon cerveau refuse de réfléchir. Pouvez-vous m’aiguiller svp ??

    Merci

    • il manque une partie du texte ... donc j’ai du mal à comprendre ce que vous faites.

      N’oubliez pas de mettre les balises <code>

    • Désolé :-/ j’ai effectivement oublié les balises <code> !!!
      Voici le même texte avec la partie manquante, et aussi, merci pour votre réponse :

      J’ai qq soucis à comprendre le fonctionnement de ce plugin. Dans une page rubrique.html, mon but est d’afficher 2 listes de mot-clés. L’un à comme nom de groupe « fruits » et l’autre « couleurs ». En choisissant un mot-clé, par ex. poire, cela renvoie à une page mot.html affichant les articles contenant le mot-clé « poire ». Depuis cette même page, j’aimerais pouvoir sélectionner un 2e mot-clé d’une 2e liste, par ex. « vert ». Ainsi, la page mot.html devrait afficher les articles contenant les mots-clés « poire » et « vert ». J’ai écrit une boucle dans un fichier inculde contenant les 2 boucles permettant d’afficher les (2) listes de mot-clés : <BOUCLE_filtre1(MOTS){id_groupe=1}>et<BOUCLE_filtre2(MOTS){id_groupe=2}>

      Sur la page mot.html, j’ai inscrit la boucle mots <BOUCLE_resultat(ARTICLES){mots}>. Or, aucun article ne s’affiche. Je dois certainement manquer une étape et/ou mon cerveau refuse de réfléchir. Pouvez-vous m’aiguiller svp ??

      Merci

    • Autre question pour ce plugin, je voudrais sélectionner les articles ayant les mots clefs « fruits » et « desserts », mais aussi ceux qui n’ont que « déserts » ou que « fruits » ! Est-ce possible ?

      Merci

    Répondre à ce message

  • 1

    Je crois que {mots 100% #ARRAY{2,1}} est faux : c’est {mots 100% #ARRAY{0,2,1,1}} que vous voulez dire non ?

    • et oui effectivement, j’avais oublié la syntaxe un peu tordu de #ARRAY lorsqu’on rentre des valeurs numériques. Je corrige, merci

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom