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

73 discussions

  • Bonjour

    Je me sers de ce plugin efficace d’ailleurs, pour créer un moteur de recherche multicritères sur plusieurs groupes de mots clés. Je souhaiterai modifier le formulaire de sélection pour faire afficher directement les 4 groupes de mots clé que j’utilise :
    -  Groupe 1 -> menu déroulant avec les mots clés du groupe
    -  Groupe 2 -> menu déroulant avec les mots clés du groupe
    -  Groupe 3 -> menu déroulant avec les mots clés du groupe
    -  Groupe 4 -> menu déroulant avec les mots clés du groupe
    Actuellement il propose d’abord -> Dans le groupe : liste déroulante avec Groupe 1, Groupe 2, Groupe 3, etc. puis un autre choix, etc.

    J’ai regardé la page recherche_par_mot.html, mais je n’y arrive pas vraiment...
    Quelqu’un pourrait il m’aider ?

    Répondre à ce message

  • À noter : le critère {mots} ne s’applique pas à... la boucle MOTS ! Dans ce cas, il suffit de faire :

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

    Répondre à ce message

  • 1

    Une alternative qui ne nécessite pas le plugin, via @denisb

    @@@ s'il existe, le tableau id_mot[] contient 1, 2 ou 3 éléments
    @@@ on peut avoir id_mot[]=xx 3 fois maximum en url
    
    <BOUCLE_test(ARTICLES)
    	{id_mot == ^(#ENV{id_mot}|table_valeur{0}|sinon{.*})$}
    	{id_mot == ^(#ENV{id_mot}|table_valeur{1}|sinon{.*})$}
    	{id_mot == ^(#ENV{id_mot}|table_valeur{2}|sinon{.*})$}
    	>
    
    @@@ ne sort *que* les articles associés à *tous* les id_mot passés en url
    • intéressant ! utile effectivement, mais ne permet pas de gérer les cas avec un nombre potentiellement illimité de mot.

    Répondre à ce message

  • 5

    Bonjour,

    Il semble y avoir un problème (v1.2.3 sous SPIP 2.1.21).

    Si j’effectue un simple :

    <BOUCLE_art(ARTICLES){mots 100% #ARRAY{0,1,1,2}}>
            #TITRE avec les mots 1 ET 2<br />
    </BOUCLE_art>

    Et qu’AUCUN article n’a les 2, ça retourne tous les articles au lieu de n’en retourner aucun !!

    Debug :

    • inc_prepare_mots_dist : retourne bien ’1=0’
    • critere_mots_dist : si je fais afficher $mots_where juste avant
      $boucle->where[] = "ntt".'$mots_where';
      j’obtiens ’’ (chaine vide) donc pas de condition au lieu d’une condition fausse... (mais même en le fixant en dur, cela ne change pas grand chose...)

    J’avoue que c’est un peu obscur pour moi...

    Une idée ?

    Julien

    • Précisions sur le debug :

      Dans la fonction « critere_mots_dist », si je rajoute le code suivant après le $boucle->hash .= ’....’ :

      $prepare_mots = charger_fonction('prepare_mots', 'inc');
      
      $mots_where = $prepare_mots($quoi, $boucle->id_table, $crit->cond, $score, $boucle->sql_serveur, $id_ou_titre);

      Du coup, le $mots_where est bien connu...
      Mais pour que ça fonctionne il faut de plus remplacer la ligne

      • $boucle->where[] = "\n\t\t".'$mots_where'; par
      • $boucle->where[] = "\n\t\t"."'$mots_where'";

      Sachant que si on le fait, ça ne fonctionnera plus dans le cas ou il y a effectivement au moins un article avec les 2 mots clés...

    • il faudrait que je fasse des tests. J’essaierai de le faire demain après le boulot. N’hésitez pas seulement à me relancer sur le sujet

    • Super, merci Maïeul !

    • Je pense que spip filtre certains test trop stupide, du type WHERE 1=0.

      Bref, http://zone.spip.org/trac/spip-zone/changeset/73711 permet de résoudre le pb. Le zip à jour sera disponible peu après 20h

    • Et ben j’aurai pu chercher longtemps !
      Ça fonctionne parfaitement désormais. Un grand merci pour pour ta réactivité.

      Julien

    Répondre à ce message

  • 3
    Horetol

    Bonjour,

    Je n’ai peut-être pas compris comment faire fonctionner ce plugin.

    La page de demo /?page=demo/parmots trouve bien tous les groupes de mots et tous les mots.

    Par contre si j’insère dans ma page sommaire ou dans une page article, selon votre exemple le code :

    <div class="ajax">
    [(#FORMULAIRE_RECHERCHE_PAR_MOTS)]
    </div>

    Rien ne s’affiche, ni groupes de mots ni mots.

    Où est mon erreur ?

    Merci

    • salut,

      je ne comprend ton pb, vu que la copie d’écran affiche bien quelque chose (même si pb de chaînes de langues, j’en conviens)

      Tu peux fournir une URL ?
      malheureusement je ne suis pas l’auteur de cette fonctionnalité et du coup je ne sais pas trop comment cela fonctionne.

    • salut,

      je m’apercois que je n’ai pas répondu...
      le pb est-t-il tjr là ?

    • Horetol

      Rien ne s’affichait. Après changement de navigateur et plusieurs recalcules un choix s’affiche dans la liste déroulante.

      Par contre, il n’y pas la déclinaison proposée au-delà d’un premier mot, donc cela n’apporte à priori rien de plus.

      Un lien vers une page d’essai du plugin : www.abipro95.com/ ?page=sommaire2

      Merci

    Répondre à ce message

  • 2

    Bonjour,

    Ce plugin me sauve ! merci. Par contre je n’arrive pas à le faire fonctionne lorsque

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

    est placé dans le bloc navigation des pages articles (j’utilise ZPIP et composition) : il ne détecte aucun groupe de mots clés alors que situé dans une page indépendante cela fonctionne très bien.
    Il y a sûrement un critère d’environnement ou autre qui restreint la sélection mais je ne trouve pas comment le résoudre.
    Merci

    • hum, malheureusement je ne suis pas spécialiste de zpip, mais a priori comme cela, je dirais qu’il faut vérifier que le fichier body.html du thème actif inclus bien le bloc de navigation via <INCLURE{fond=navigation/#ENV{type},env}>, avec le env complet.

    • Bonsoir,

      merci de ta réponse. Oui le body est conforme (je n’y ai pas touché).

      Lorsque je suis sur la page site/?page=recherche_mot (construite avec Z) tout fonctionne avec :

      #SET{FiltreGroupes,#ARRAY}
          <BOUCLE_FiltreGroupes(GROUPES_MOTS)>
          #SET{FiltreGroupes,
                #GET{FiltreGroupes}|push{#ID_GROUPE}}
          </BOUCLE_FiltreGroupes>
          <div class="ajax">
          [(#FORMULAIRE_RECHERCHE_PAR_MOTS{#GET{FiltreGroupes}}{#URL_PAGE{recherche_mot}})]
          	</div>	

      Si je suis sur un squelette d’article je peux choisir mes groupes de mots et les mots clés mais l’URL rechargée donne :
      site/?article12&mots[]=94       

      et donc on reste sur la même page sans avoir les résultats.

      dd

    Répondre à ce message

  • 2

    bonjour,
    avec spip 3.0.5, le plugin et une boucle SITES, il y a un bug dans la requête sur la table spip_mots_liens, l’objet recherché est « syndi » alors que dans la table, l’objet enregistré est « site »

    SELECT syndic.id_syndic, syndic.url_site, syndic.nom_site
    FROM spip_syndic AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3luZGljPC9jb2RlPg=="></span>
    WHERE (syndic.statut = 'publie')
    	AND (syndic.id_rubrique = 392)
    	AND syndic.id_syndic IN (
    		SELECT id_objet FROM spip_mots_liens WHERE id_mot=71 and objet='syndi' GROUP BY id_objet,objet  HAVING SUM(1) >= 1
    	)

    Répondre à ce message

  • 4

    Besoin d’un avis.

    J’ai adapté le plugin pour ma navigation. Au départ c’était très efficace mais plus le site prend de l’empleur et plus il y a de visites et plus je trouve la navigation lente... trop lente pour ajouter plusieurs critères.

    http://www.librairie-interactive.com/spip.php?page=mot&mots[]=27

    je vous mets mon code issu du formulaire du plugin :

    <div id="filtrerecherche">
    
    <B_Tags>
    <div id="postDetailInfos" >
    <a class="bouton_supprimer" href="#URL_PAGE{mot,id_groupe=2}" 
    title="supprimer tous les filtres"><img src="/images/croix2.png"/></a>
    <div class="titre_filtre"><h4>Filtre(s) activé(s) : </h4></div>
    
    <BOUCLE_Tags(MOTS){id_mot IN #ENV{mots}} {par titre}{" "}>[(#SET{lesautresmots,[(#ENV{mots}|critere_mots_enleve_mot_de_liste{#ID_MOT})]})]
    <div>
    <a class ="filtre" href="[(#ENV{action}|parametre_url{mots,#GET{lesautresmots}}
    |parametre_url{id_groupe,2})]"title="<:ecrire:info_supprimer_mot|ucfirst|attribut_html:> ([(#TITRE|ucfirst|textebrut|attribut_html)])" class="tags">
    [(#TITRE|ucfirst)]</a>
    
    </div>
    </BOUCLE_Tags>
    
    </div>
    </B_Tags>
    
    <form action='[(#ENV{action})]' method="post" id="formulaire_recherche_par_mot" class="formulaire_spip formulaire_recherche_par_mot">
    <div>
    	#ACTION_FORMULAIRE{#ENV{action}}
    	<BOUCLE_Tagshidden(MOTS){id_mot IN #ENV{mots}}>
    	<input type="hidden" name="mots[]" value="#ID_MOT" />
    	</BOUCLE_Tagshidden>
    	[(#REM) N'afficher le choix du groupe que s'il y en a plusieurs ]
    	<BOUCLE_PlusieursGroupes(GROUPES_MOTS)
    {id_groupe ?IN #ENV**{id_groupe}}{1,1}>
    	[(#ENV{le_groupe}|non)<input type="hidden" name="choixmot" value="1" />]
    	
    	<label class="bloclabel1" for="recherchegroupe">
    Ajouter un filtre dans la catégorie :</label>
    	
    		
    		<div id="recherchegroupe">
    		<BOUCLE_RechercheMot(GROUPES_MOTS){par num titre, titre}{id_groupe ?IN #ENV**{id_groupe}}>
    		<input type="radio" id="recherchegroupe" 
    name="le_groupe" class="searchfield" onclick="if ((this.value != '')
    [ && (this.value != (#ENV{le_groupe}))]) { $('#formulaire_recherche_par_mot').submit();}"value="#ID_GROUPE"
    [ (#ID_GROUPE|=={#ENV{le_groupe}}|?{'checked="checked"'})]/>
    [(#TITRE|supprimer_tags)]
    		</BOUCLE_RechercheMot>
    		</div>
    	</BOUCLE_PlusieursGroupes>
    	<BOUCLE_LeGroupe(GROUPES_MOTS){id_groupe ?IN #ENV**{id_groupe}}>
    	<input type="hidden" name="legroupe" value="#ID_GROUPE" />
    	#SET{legroupe,#ID_GROUPE}
    	</BOUCLE_LeGroupe>
    	<input type="hidden" name="choixmot" value="1" />
    	<//B_PlusieursGroupes>
    	
    	
    	
    	<B_MotsDuGroupe>
    
    	<label class="bloclabel2" >Avec le mot:</label>
    	<select id="recherchemot" name="mots[]" class="searchfield" 
    onclick="if ((this.value != '')[ && (this.value != (#ENV{id_mot}))]) {$('#formulaire_recherche_par_mot').submit();}">
    		
    		<option value="">Choisissez un mot</option>	
    		
    		<BOUCLE_MotsDuGroupe(MOTS){id_groupe=#ENV{le_groupe,#GET{legroupe}}}{par titre}
    {id_mot !IN #ENV{mots, #ARRAY{}}}>
    		#SET{avecunmotdeplus, #ARRAY{}}
    		[(#SET{avecunmotdeplus,[(#ENV{mots, #ARRAY{}}|push{#ID_MOT})]})]
    		<INCLURE{fond=formulaires/recherche_par_mots_compteur, mots=#GET{avecunmotdeplus}, id_mot=#_MotsDuGroupe:ID_MOT, titre=(#_MotsDuGroupe:TITRE|supprimer_tags)}>
    		</BOUCLE_MotsDuGroupe>
    	</select>
    	
    	</B_MotsDuGroupe>
    	
    	<noscript><div style="display:inline;"><input type="submit" 
    id="sendsearchmc" class="okfield form_submit" value="<:pass_ok:>" />
    </div></noscript>
    </div>
    </form>
    </div>

    Merci d’avance pour votre aide.

    • heu, d’abord je vous déconseille d’utiliser #ENV**.

      Ensuite j’ai du mal à voir la lenteur. Par contre le formulaire n’a pas l’air de marcher (ou alors c’est cela la lenteur, tellement lent qu’on a l’impression que c’est pété).

      Par ailleurs, je ne vous voix pas utiliser le critère {mots}, docn j’avoue ne pas saisir pourquoi vous écrivez ici.

      Je vous conseille pour tester vos problème d’utiliser le ?var_profile de spip (vous trouverez de la doc sur internet) qui vous permettra de savoir quels est la boucle problématique.

      Bref, tout cela pour dire que j’ai un peu du mal à vous aider. Désolé =(

    • Je pense bien poster au bon endroit puisqu’il s’agit du formulaire du plugin présenté sur cet article.

      Je ne suis pas l’auteur du ENV** qui vient du code d’origine.

      Je ne connaissais pas ?var_profile mais ça ne semble pas fonctionner sur mon site. Je colle le code à la suite de mon url, en étant logué en admin mais la page du site s’affiche normalement et n’apporte donc aucune information.

      j’imagine que je rate quelque chose ?

      Pour ce qui est du formulaire, il fonctionne, très lentement parfois et à priori, cela est en lien avec le nombre de personnes sur le site.

    • il faudrait voir avec Real3T qui est à l’origine du forme. Je le previens.

    • Si ça peut aider quelqu’un j’ai un peu avancé. J’’ai modifié le fichier du formulaire « recherche_par_mots.html » en remplaçant l’inclusion de « recherche_par_mots_compteur » par

      <option value="#_MotsDuGroupe:ID_MOT">[&nbsp;(#_MotsDuGroupe:TITRE|supprimer_tags)]</option>

      Le squelette en question utilisait une boucle article avec une pagination de 1 et un grand total qui ralentissait énormément (trop) la requête.

      Du coup, ça marche beaucoup plus vite (mais on perd) l’information sur le nombre d’articles que l’on va obtenir en choisissant d’ajouter le mot clé en question.

      @Maïeul
      « tellement lent qu’on a l’impression que c’est pété » je crois que le gardien du SQL privé OVH devait stopper la requête trop longue !

      Malheureusement je n’ai pas encore complètement résolu mon problème. Le choix d’un nouveau mot clé est rapide à présent (2 à 3 secondes) mais plus on rajoute de mots clés, plus l’affichage des résultats devient long (dès que l’on dépasse 2-3 mots) alors que normalement, le nombre d’articles concernés allant en diminuant (du fait d’un filtre plus précis), l’affichage des résultats devrait être plus rapide (au pire aussi rapide qu’au début).
      Même la pagination devient de plus en plus lente (voir extrèmement lente) lorsqu’il y a plusieurs mots sélectionnés !

      Je ne sais pas du tout de quel côté chercher ! Je suis preneur de toute proposition.

      Pour test : http://www.librairie-interactive.com/spip.php?page=mot&mots[]=14

      Merci d’avance

    Répondre à ce message

  • 13

    Bonjour,
    J’utilise ce plugin, j’ai 3 groupes de mots de clés et la recherche se passe bien, mais j’aimerai afficher dans la page résultat le titre des mots clés choisi pour la recherche et cela me pause problème. Pourtant j’ai mis la boucle mot mais rien ne s’affiche. Merci de votre aide. Voici la boucle de mon résultat :

    <div id="annonces-liste">
    [(#REM) Articles trouves ]
    #ANCRE_PAGINATION
    <BOUCLE_articles(ARTICLES) {recherche?} {!par #ENV{tri,points}} {mots?} {id_rubrique !IN 2} {pagination 10}>
      <h2><a href="#URL_ARTICLE"><span class="prix">12 000 F à débattre</span>[(#TITRE)]</a></h2>
    <div class="annonce-contenu">
    [(#LOGO_ARTICLE|image_reduire{130,86}|image_passe_partout{130,86})]<span class="annonce-date">[(#DATE|affdate)]</span>[(#CHAPO)]<span class="annonce-date"><BOUCLE_g(GROUPES_MOTS){id_groupe IN 1,2,3}{" | "}>
    <BOUCLE_m(MOTS){id_groupe}{id_article}><a href="#URL_MOT">[(#TITRE)]</a></BOUCLE_m>
    </BOUCLE_g>
    </span>  </div></BOUCLE_articles>
     </div>
    
     [<div id="pagination">(#PAGINATION)</div>]			
    </B_articles>
    </div>
    • je suis assez étonné : je ne vois rien de problematique dans la boucle.

      Il faudrait regarder la requete SQL générée, via le ?var_mode=debug

    • Merci pour votre réponse la boucle est correcte et les résultats sont bon aussi. Ce que j’aimerai c’est d’afficher les titres des mots choisit. Par exemple kan je choisis les mots clés : mot1, mot2 et mot3, j’aimerai afficher dans ma page resultat dans une balise <h1></h1> les mots clés choisis séparé par une virgule et afficher juste en bas la liste de tous les articles liés aux mots choisis :

      mot1, mot2, mot3

      liste article

      j’ai fais ces boucles mais j’arrive tjrs pas a récupéré le titre des mots clés :

      <BOUCLE_mot(MOTS){id_mot=#ENV{mots}}>#TITRE</BOUCLE_m>
      et
      <BOUCLE_mot(MOTS){id_mot=#ENV{id_mot}}>#TITRE</BOUCLE_m>

      Merci de votre aide

    • Bonjour tout le monde et à Maïeul,

      Vous n’avez toujours pas de réponse à ma question

    • J’ai essayé toutes les boucles possibles en mots clés, mais toujours pas de résultat. Merci encore de votre aide

    • a je comprend mieux ce que vous voulez. Votre présentation de départ n’était pas claire : je croyais que la boucle vous retournait un mauvais résultat. En fait vous voulez une nouvelle boucle pour autre chose.

      La solution :
      <BOUCLE_mots(MOTS){id_mot in #ENV{id_mot}}>...

    • bonjour Maïeul,
      La solution n’affiche rien malheureusement, je ne sais pas ce qui cloche. voici mon formulaire :

      <form method="get" action="spip.php?page=resultat">
      <input name='page' value='rechercheannonce' type='hidden' />
      <B_g1>
      <select name="mots[0]">
      <BOUCLE_g1(GROUPES_MOTS){id_groupe IN 1}>
      <option value="">#TITRE</option>
      <BOUCLE_surmot(MOTS){id_groupe}>
      <option value="#ID_MOT" [(#ENV{id_mot}|=={#ID_MOT}?{"SELECTED"})]>#TITRE </option>
      </BOUCLE_surmot>
      </select>
      </BOUCLE_g1>
      </B_g1>
      <B_g2>
      <select name="mots[1]">
      <BOUCLE_g2(GROUPES_MOTS){id_groupe IN 2}>
      <option value="">#TITRE</option>
      <BOUCLE_surmot2(MOTS){id_groupe}>
      <option value="#ID_MOT" [(#ENV{id_mot}|=={#ID_MOT}?{"SELECTED"})]>#TITRE </option>
      </BOUCLE_surmot2>
      </select>
      </BOUCLE_g2>
      </B_2>
      <B_g3>
      <select name="mots[2]">
      <BOUCLE_g3(GROUPES_MOTS){id_groupe IN 3}>
      <option value="">#TITRE</option>
      <BOUCLE_surmot3(MOTS){id_groupe}>
      <option value="#ID_MOT" [(#ENV{id_mot}|=={#ID_MOT}?{"SELECTED"})]>#TITRE </option>
      </BOUCLE_surmot3>
      </select>
      </BOUCLE_g3>
      </B_3>
      <input type="submit" class="bouton" value="<:rechercher:>" /> 
      </form>

      et voici la page du resultat.html

      <B_articles>
      <h1><BOUCLE_mots(MOTS){id_mot in #ENV{id_mot}}>#TITRE</BOUCLE_mots></h1>
      <div id="annonces-liste">
      [(#REM) Articles trouves ]
      #ANCRE_PAGINATION
      <BOUCLE_articles(ARTICLES) {recherche?} {!par #ENV{tri,points}} {mots?} {id_rubrique !IN 2} {pagination 10}>
        <h2><a href="#URL_ARTICLE"><span class="prix">12 000 F à débattre</span>[(#TITRE)]</a></h2>
      <div class="annonce-contenu">
      [(#LOGO_ARTICLE|image_reduire{130,86}|image_passe_partout{130,86})]<span class="annonce-date">[(#DATE|affdate)]</span>[(#CHAPO)]<span class="annonce-date"><BOUCLE_g(GROUPES_MOTS){id_groupe IN 1,2,3}{" | "}>
      <BOUCLE_m(MOTS){id_groupe}{id_article}><a href="#URL_MOT">[(#TITRE)]</a></BOUCLE_m>
      </BOUCLE_g>
      </span>  </div></BOUCLE_articles>
       </div>
      [<div id="pagination">(#PAGINATION)</div>]			
      </B_articles>

      comme tu le vois dans le <h1></h1> j’ai bien mis la solution de la boucle mot pour afficher les titres mais rien ne s’affiche. Merci de ton aide

    • en fait vu votre formulaire, il vous faut <BOUCLE_mots(MOTS){id_mot in #ENV{mots}}>....

      Je vous invite à lire La balise #ENV

    • Salut Maïeul,

      Merci pour la réponse, j’y était presque en faisant :
      <BOUCLE_mot(MOTS){id_mot=#ENV{mots}}>#TITRE</BOUCLE_m>
      au lieu de ta boucle
      <BOUCLE_mot(MOTS){id_mot in #ENV{mots}}>#TITRE</BOUCLE_m>

      Mais je ne comprend toujours pas pourquoi il ya que le titre du group1 qui est affiché, même si

      je choisis 2 ou 3 mots clés...où se trouve le problème ? Merci encore de ton aide

    • tu aurais un url de demo ?

    • Salut,
      voici l’url URL

      Merci de ton aide !

      PS : Il ya que le titre du mot clé de groupe1 qui s’affiche, sinon les autres ne s’affichent pas. Même si on choisit 2 ou 3 mots clés, seul le tire de groupe1 s’affiche

    • Bonjour Maïeul,

      vous avez vu l’url ?

    • je tombe sur une erreur 404.

      le mieux serait que vous me fassiez parvenir un dump de votre base et vos squelette par email

    • ok, mea culpa.

      Donc c’est {id_mot IN #ENV{mots}} avec le IN en majuscule.

    Répondre à ce message

  • 1

    Bonjour,
    Je viens d’installer le plugin, il fonctionne très bien lorsque je ne choisis qu’un critère. En revanche il m’affiche systématiquement tous les articles dès que je choisi plusieurs mots-clefs... j’ai essayé de suivre les différentes préconisations mais rien à faire.... help please !!

    • peut tu expliquer un peu plus ? est-ce que le bug n’est pas celui décrit par RealET ci dessous. ?
      ps : inutile de crier, ca ne fait pas plus venir les gens.

    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