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

  • 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

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

    Répondre à ce 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)

    Répondre à ce message

  • Merci pour ce plug que j’ai pris à la place de la recherche avancée. Cependant j’ai un inconvénient :
    -  affichage des articles que si les 2 mots des groupes sont sélectionnés dès le départ.
    -  pas d’affichage des articles avec 1 seul mot de sélectionné
    -  pas de possibilité de rajouter un mot quand un seul a été sélectionné.

    #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},#SELF})]
    </div>
    
    
    <B_recherche_par>
    <div class="menu articles">
    	<BOUCLE_recherche_par(ARTICLES){mots}{!par date}{pagination 5}>
    		<div class="clubs"><h3>#TITRE</h3> #TEXTE
    				
    				<BOUCLE_lesmots2(MOTS) {id_groupe=1} {id_article}>
    				<span> >> <b>Activités</b> : #TITRE</span>
    				</BOUCLE_lesmots2></div>
    	</BOUCLE_recherche_par>
    	
    <p id="pagination" class="clearfix pagination nettoyeur">
    	#PAGINATION
    </p><!-- #pagination -->
    </div>
    </B_recherche_par>

    Je bloque un peu et vous remercie pour votre aide. :)

    Répondre à ce message

  • 4

    Bonsoir !

    J’utilise ce plugin génial depuis un bon moment ! Il est au coeur de la navigation de mon site. Seulement voilà, je viens de m’apercevoir qu’il y avait un problème sous IE8.

    J’avais jusqu’alors testé mon site sous les dernières versions de Firefox, Chrome, Safari, Opéra ainsi que sous une version de IE9 sans aucun pb.

    Sous IE8, d’une part, en cliquant sur les boutons radio, l’ajax ne se met pas en route (il faut cliquer deux fois) et d’autre part, après l’ajout d’un mot dans le tableau, l’affichage de la page plante !

    Je vous mets un lien de l’une des pages utilisant le code !

    http://www.librairie-interactive.com/spip.php?page=mot&id_groupe=3

    Merci d’avance pour le temps que vous accorderez à mon pb !

    • Personne n’a ie8 pour voir le pb et surtout une idée pour me donner un piste de recherche ?

    • Pour ceux que ça pourraît aider, j’ai résolu le premier problème qui était lié à l’interprétation du « onchange » par ie7 et 8.

      http://webbugtrack.blogspot.fr/2007/11/bug-193-onchange-does-not-fire-properly.html

      Le problème se resoud facilement en remplaçant le onchange par onclick !

      Par contre, je n’ai pas encore résolu le problème de destructuration de la page au moment de choisir le mot. Il semble que l’ensemble du code n’est pas chargé (problème d’ajax ?)

      Je suis toujours preuneur d’un coup de pouce !

    • merci,

      je ne peux aider, n’étant pas à l’origine de cette fonctionalité.

    • Bon ! Pour le problème d’affichage, c’était bien de ma faute ! Après un moment de recherche, une simple balise h4 fermante sans le slash... Seul IE 7 et 8 l’interprétaient !

      Merci à ceux qui ont regardé !

      mike

    Répondre à ce message

  • 8

    Bonjour j’utilise ce plugin qui est hyper intéressante, je n’ai jamais eu de problème sauf maintenant. J’ai un champ avec les mots clé du groupe 3 et un autre champ qui sélectionne une date avec « datepicker » , voici ma boucle resultat

    <BOUCLE_agenda(ARTICLES) {recherche?} {!par #ENV{tri,points}} {mots?} {!par date} {pagination 5} {id_rubrique IN 1}>
     <li>
     <a href="#URL_ARTICLE" title="[(#ETABLISSEMENT|textebrut)]">[(#LOGO_ARTICLE|image_reduire{190,0}|image_recadre{75,90,center})]
              </a>
         </li>		
    </BOUCLE_art>

    Si je choisit une date j’ai pas le bon resultat. Chaque article a un évènement dont les date sont géré par le plugin agenda. Merci de votre réponse

    • qu’entendez vous par « je n’ai pas le bon résultat » ? quel résultat avez vous vous et à quel résultat souhaitez vous aller ?

    • Merci pour votre réponse, si je choisis une date j’aimerai afficher les articles qui ont un événement à cette date. Alors j’aimerai savoir qu’est ce qu’il faut ajouter dans ma boucle de resultat pour que cela marche.

      PS : j’ai utilisé le plugin agenda pour creer les évènements dans les articles, alors les dates sont géré par ce plugin. Merci pour votre réponse

    • Hum,

      ce n’est pas un problème spécifique au critère mot, mais plutôt au plugin agenda ;-)

      Je suis un peu fatigué ce soir, donc je préfére ne pas écrire de bêtises, parceque c’est un code un chouilla complexe (il faut d’abord séléctionner les evenements à une date donnée, puis les articles liés à ces agendas).

      Pourquoi ne posez vous pas la question sur la liste de discussion de SPIP ? Sinon j’essaierai de trouver le code correct ce week-end (ce n’est pas compliqué, mais il faut faire les choses posément).

    • Merci beaucoup, j’ai posé la question sur la liste de discussion mais j’ai pas encore de réponse. Vous aurez une réponse avec la tête reposée. Merci encore

    • Bonjour Maïeul,
      Je compte sur vous pour le resultat de la recherche avec la datepicker, jusqu’à présent j’ai pas de réponse de la liste. Voici mon champ input de la date

      <input name="date1" id="datepicker" class="date-pick dp-applied" type="text" />

      les autres input sont des mots clés. Merci de votre aide

    • bon, déjà il faudrait que votre name soit égale à date_debut, car c’est le nom de du champ pour l’évenement.

      ensuite un code suivant devrais faire l’affaire, si j’ai bien compris le pb

      <BOUCLE_agenda(EVENEMENTS){jour_relatif_debut=0}>
      
      <BOUCLE_art(ARTICLES) {recherche?} {mots?}  {!par #ENV{tri,points}} {!par date} {pagination 5} {id_rubrique IN 1}{id_article}{doublons evenement}>
      <li>
      <a href="#URL_ARTICLE" title="[(#ETABLISSEMENT|textebrut)]">[(#LOGO_ARTICLE|image_reduire{190,0}|image_recadre{75,90,center})]
               </a>
          </li>                
      </BOUCLE_art>
      </BOUCLE_agenda>

      -  boucle evenements permet de selectionner les evenements du jour courant
      -  le id_article permet de selectionner l’article correspondant aux évenements, et le doublon évite de selectionner 2 fois l’article si celui ci a 2 evt le même jour

      Encore une fois, ce n’est pas un pb de critères mots, mais d’agenda : vous devriez demande plutôt sur le plugin agenda. Voyiez aussi http://www.spip.net/fr_article1971.html

    • Bonjour Maïeul, mille merci pour ton aide, J’ai testé la solution que vous m’avez proposé sans succès. Mais je reviens encore vers vous. J’ai changé de méthode, maintenant les mots clés sont attachés directement aux évènements et non pas aux articles (je penses que serait plus simple avec ce plugin). Alors j’avance bien, je rencontre un seule problème
      1/ quand je choisis une date, résultat OK (affiche les événements qui ont la date choisi)
      2/ quand je choisis une date et un mot clé , résultat OK (affiche les événements lié à la date choisis)
      3/ quand je choisis mot clé, PROBLEME (rien ne s’affiche, alors que ya bien des événement qui sont attaché a ce mot)

      Voici ma formulaire :

      <form action="spip.php?page=resultat" method="get" >
      <input name='page' value='resultat' type='hidden' />           
            <input name="date_debut" id="datepicker" class="date-pick dp-applied" type="text" />
            
      	<select name="mots[0]">
              <option value="0" selected="selected">Choisir une cat&eacute;gorie</option>		
              <optgroup label="Culture">
      		<BOUCLE_g1(GROUPES_MOTS){id_groupe IN 2}>
              <BOUCLE_surmot(MOTS){id_groupe}{par titre}>
              <BOUCLE_articledesmotscles(ARTICLES){id_mot}>
      		</BOUCLE_articledesmotscles>
      		<option value="#ID_MOT" [(#ENV{id_mot}|=={#ID_MOT}?{"SELECTED"})]>#TITRE </option>
              </BOUCLE_surmot>
      		</BOUCLE_g1>
      		</optgroup>
      </select>
      <input name="submit" type="submit" class="search" title="Rechercher dans l'agenda" value="Rechercher" />
      </form>

      Voici ma boucle resultat :

      <div id="resulta">
      Recuperation date choisie: [(#ENV{date_debut}|affdate)]
      Recuperation  mot choisis?
      
      [(#SET{annee,#ENV{date_debut}|affdate{annee}})]
      [(#SET{mois,#ENV{date_debut}|affdate{mois}})]
      [(#SET{jour,#ENV{date_debut}|affdate{jour}})]
      
      <B_agenda>
      <ul>
      <BOUCLE_agenda(EVENEMENTS){mots?} {recherche?} {!par #ENV{tri,points}} {agendafull date_debut, date_fin, jour, #GET{annee}, #GET{mois}, #GET{jour}?} {pagination 5}>
      <BOUCLE_art(ARTICLES) {id_rubrique IN 1}{id_article}>
       <li>
       <a href="#URL_ARTICLE" title="[(#ETAB|sinon{#LIEU2}|textebrut|couper{30})]">[(#LOGO_ARTICLE|image_passe_partout{75,90}|image_recadre{75,90,center})]
            <span class="titre entry-title">#TITRE</span>      
        [<span class="date">(#DATE_DEBUT|Agenda_affdate_debut_fin{#DATE_FIN,#HORAIRE=non})</span>]
              [<span class="descriptif entry-content">(#CHAPO|TEXTEBRUT|COUPER{150})</span>]
              <hr />
              </a>
           </li>		            
      </BOUCLE_art>
      </BOUCLE_agenda>
      </ul>
      </B_agenda>
      </div>

      Pour finir comment récupérer dans la page résultat le titre du mot clé choisi ??

    • pas compris : vous voulez faire une recherche sur un mot clef ou sur plusieurs en même temps ? car si un seul mot clef, pas besoin du plugins. Sur plusieurs, je n’ai jamais testé avec evenements.

      Pour afficher le titre du mot clef, utilisez une boucle mot classique de SPIP

    Répondre à ce message

  • Bonjour Maïeul,
    Je compte sur vous pour le resultat de la recherche avec la datepicker, jusqu’à présent j’ai pas de réponse de la liste. Voici mon champ input de la date

    <input name="date1" id="datepicker" class="date-pick dp-applied" type="text" />

    les autres input sont des mots clés. Merci de votre aide

    Répondre à ce message

  • 3

    J’essaie de faire fonctionner ce plugin mais je n’arrive à avoir les bons résultats, qui ne correspondant pas du tout.

    <BOUCLE_article(ARTICLES) {id_article}>
    ...
    #SET{mots,#ARRAY}
    <BOUCLE_mot_travaux(MOTS){id_article}{par titre}{id_groupe==5}>
    #SET{mots,#GET{mots}|push{#id_mot}}
    <a href = "#URL_MOT">#TITRE</a></BOUCLE_mot_travaux> 
    ...
    <BOUCLE_article_lies(ARTICLES){mots 100% #GET{mots}}{par date}{inverse}>#TITRE</BOUCLE_article_lies>
    ...
    </BOUCLE_article>

    Mon article de test a 11 mots-clefs, j’attends donc que ma deuxième boucle articles ne sélectionne que les articles liés qui on 100% de ces 11 motfs-clefs

    Mais j’ai pourtant une longue liste d’article qui ne correspond pas du tout à ce critère.

    Une erreur dans ma boucle, une mauvaise compréhension du critère ?

    • mettre #ID_MOT en majuscule dans le push devrait résoudre l’affaire ?

    • Non, ça ne change rien ...

      En fait, le plugin (version 1.2.3) installé via http://files.spip.org/spip-zone/archives.xml ne fonctionne pas en spip3 comme indiqué.

      Il produisait des erreurs : Erreur 1146 de mysql : Table ’etraces_spip3.spip_mots_articles’ doesn’t exist

      RastaPopoulos a réglé ça http://zone.spip.org/trac/spip-zone/changeset/59904

      La version 1.3 fonctionne mais demande vraiment trop de ressources pour être utilisable.

      100% de cpu utilisé, Query_time : 608.329400

    • hum, malheureusement je n’ai pas assez de compétence mysql pour régler ce pb. C’était fil qui avait fait le code initiale, je m’étais contenté de l’adapter à la syntaxe.

    Répondre à ce message

  • LENTEUR

    Bonjour,

    j’utilise le formulaire « n’affichant que certains groupes de mots » , il s’agit d’un groupe de mot contenant une centaine de mots clés.

    lorsque je sélectionne un mot clé dans le menu déroulant j’ai un appercu du nombre d’articles qui répondent à ce critère, le temps d’affichage de ces articles est tes long, anormalement long, 15/20 secondes,

    avez vous une astuce pour améliorer cette efficacité ?

    merci

    Répondre à ce message

  • 6

    Bonjour à tous,

    J’arrive à filtrer en fonction d’un mot clef quand je le mets en dur dans le squelette.
    Mais comment faire si je veux qu’il soit en variable sans qu’il passe par l’URL ?

    je m’explique, c’est tout simple mais je n’ai pas trouvé comment faire :

    je suis sur un article qui a pour mot clef « aaa » comment faire une boucle qui me donne tous les articles ayant le même mot clef ?

    mon code pour le moment avec le mot en dur :

    <BOUCLE_mot (MOTS) {id_article}>
                                        #SET{mots, #ARRAY{0,aaa}}
                                        <BOUCLE_article_mot (ARTICLES){id_rubrique!=11}{mots 100% #GET{mots}}>
                                            <a href="[(#URL_RUBRIQUE|parametre_url{art,#ID_ARTICLE})]">#TITRE, </a>
                                        </BOUCLE_article_mot>
                                    </BOUCLE_mot>

    merci !

    • Il faut que vous remplissiez dynamiquement le tableau mots.

      Pour ce faire

      #SET{mots,#ARRAY}
      <BOUCLE_mots>
      #SET{mots,#GET{mots}|push{id_mot}}
      </BOUCLE_mots>

      Par ailleurs il faut que vous sortiez la boucle articles_mots de la boucle mot, sinonvous elle sera affichée autant de fois qu’il y a de mois à l’article.

    • Merci pour cette réponse rapide !

      J’ai essayé ça, mais je ne dois pas avoir tout compris...

            	#SET{mots,#ARRAY}
                                                                    
                                     <BOUCLE_mot (MOTS) {id_article}>
                                          #SET{mots,#GET{mots}|push{id_mot}}
                                      </BOUCLE_mot>
                                      
                                      <BOUCLE_article_mot (ARTICLES){id_rubrique!=11}{mots 100% #GET{mots}}>
                                      	<a href="[(#URL_RUBRIQUE|parametre_url{art,#ID_ARTICLE})]">#TITRE, </a>
                                      </BOUCLE_article_mot>

      j’ai l’impression que de cette manière il ne comprend pas à quel mot l’array doit faire référence, je me trompe ?

      Merci beaucoup du temps que vous m’accordez en tout cas

    • J’ai finalement réussi mais en laissant la boucle article dans la boucle mot
      Je n’ai pas de problème de répétitions, même quand j’ai plusieurs mots clefs associés. Bizarre mais ça fonctionne

      Le code pour ceux que ça intéresserait :

           #SET{mots,#ARRAY}                   
                                     <BOUCLE_mot (MOTS) {id_article}>
                                          #SET{mots,#GET{mots}|push{id_mot}}
                                          <BOUCLE_article_mot (ARTICLES){id_rubrique!=11}{id_mot}{exclus}>
                                          <a href="[(#URL_RUBRIQUE|parametre_url{art,#ID_ARTICLE})]">#TITRE, </a>
                                      </BOUCLE_article_mot>
                                      </BOUCLE_mot>

      Merci pour ce plugin et pour ton aide précieuse

    • votre seconde solution effectivement fonctionne … mais n’utilise pas ce plugin (pas de critères mots)

      il utilise juste les possibilités standard de SPIP. Et le pb de répétition absent est normal, grâce au critère exclus.

      par contre je ne comprend pas que le premier exemple n’ai pas fonctionné : est)ce que par hasard vous auriez #SETmots,#ARRAY dans la partie optionnelle d’une boucle ?

    • Ah ok... !

      Non, je n’ai jamais utilisé #SET ou #ARRAY ailleurs que pour cette boucle dans les conditions énoncées plus haut. Mais mon niveau de développement est tellement proche de 0 qu’il est possible qu’une erreur quelque part ailleurs empêche votre solution de fonctionner !

      Merci

    • Eerik Wissenz

      J’avais la meme besoins : juste afficher les articles qui on tout (et que tout) les mots clef du context (genre les mots clef d’un rubriques ou un articles), puis ordre tout ca par date inverse.

      Maïeul propose biens la bonned solution, merci, mais a oublier un « # » avant id_mots « push », et « id_mot » devrais etre « ID_MOT ».

      #SET{mots,#ARRAY}                                
                                     <BOUCLE_mot (MOTS) {id_article}>
                                          #SET{mots,#GET{mots}|push{#ID_MOT}}
                                      </BOUCLE_mot>
                                      
                                      <BOUCLE_article_mot (ARTICLES){mots 100% #GET{mots}}{par date}{inverse}>
                                      	<a href="#URL_ARTICLE">#TITRE, </a>
      </BOUCLE_article_mot>

      Remarque, dans un context rubriques, just change « id_article » avec « id_rubrique » dans la premier boucle. Aussi, oublie pas de cocher dans la mot clefs groupe que tu peur associer ce les mots clef de ce group a des rubrique (c’est possible que pour des article par default, Spip 2.1.12).

      Pardon mon francais, je suis Anglophone mais je me debroille en francais assez pour bien Spiper. Vive Spip !

    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