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 connus.

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}

Il ne faut utiliser qu’une seule fois par boucle l’un 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;amp;mots[0]=1&amp;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
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 :

  1. [(#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); 

Footnotes

[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.

updated on 15 July 2019

Discussion

71 discussions

  • 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.

    Reply to this 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

    Reply to this 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

    Reply to this 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

    Reply to this 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 `syndic`
    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
            )

    Reply to this 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

    Reply to this 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.

    Reply to this 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.

    Reply to this message

  • 4

    Bonjour,

    J’ai trouvé un “bug” du plugin.

    Soit un mot affecté à autre chose qu’un article (chez moi, c’est valable si c’est un auteur, une rubrique, un site).

    À ce moment là, <BOUCLE_recherche_par(ARTICLES){mots_selon_id}{pagination 1}>[<option value="(#ENV{id_mot})">[&nbsp;(#ENV{titre})][ ((#GRAND_TOTAL))]</option>]</BOUCLE_recherche_par>

    Renvoie tous les articles.

    Testé avec mots_selon_id et aussi avec mots.

    Autrement dit, dès qu’un mot est affecté à autre chose qu’un article, le critère utilisé dans une boucle article renvoie tous les articles alors qu’il devrait n’en renvoyer que ceux qui ont les mots clefs cherchés.

    • quel version de SPIP ? j’avoue que je ne suis pas fort dans ce domaine, c’est fil le responsable du code, moi je me suis juste contenter d’établir la syntaxe.

    • Il s’agit de SPIP 2.1.13

    • Bonjour

      Avez-vous réussi à résoudre ou contourner ce bug. J’ai un souci ressemblant et je ne peux pas croiser les critères des différents groupes.

      Soit les actions suivantes :
      -  un mot-clé A est sélectionné dans l’un des groupes de mot-clés ;
      -  les articles associés au mot-clé A choisi s’affichent ;
      -  on choisit un deuxième groupe de mots-clés dans lequel sélectionner un nouveau critère ;
      -  les mots-clés de ce deuxième groupe réagissent alors selon deux cas de figure : s’il existe des articles qui sont associés à la fois à un mot-clé de ce deuxième groupe ET au mot-clé A précédemment choisi , le mot-clé s’affiche avec un GRAND_TOTAL exact ; s’il n’existe pas d’articles associés à un mot-clé de ce deuxième groupe ET au mot-clé A précédemment choisi, le mot-clé s’affiche avec un GRAND TOTAL incohérent.
      -  si on choisit en deuxième critère le mot-clé dont le GRAND TOTAL est incohérent, on provoque l’affichage de tous les articles.

      J’utilise SPIP 2.1.10.

      Je ne trouve pas la raison de ce problème.

      Merci de votre réponse

    • malheureusement non, je n’ai pas eu le tps de me pencher dessus.

      Il faudrait que vous m’envoyiez un extrait de la base de donnée qui pose pb, que j’ai de quoi bosser.

    Reply to this message

  • 1

    Bonjour,

    ce plugin est-il vraiment utilisable avec Spip 3.0?

    J’essaie d’installer la version 1.2.3 (la seule disponible au téléchargement) sur mon site en Spip 3.0, et le gestionnaire des plugins m’informe qu’il ne peut pas être installé car il est incompatible.
    Est-il possible de récupérer une version compatible dans ce cas?

    Merci

    • oui, il existe une version, que je n’ai pas personellement testée. Je viens de dire à la zone de générer le zip. Il faut que vous attendiez 18h pour l’avoir via le chargeur automatique, ou 14h pour la récuperer directement sur http://plugins.spip.net (version 2.0)

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom