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&mots[0]=1&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.
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);
Discussions par date d’activité
74 discussions
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
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})">[ (#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
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é.
Je bloque un peu et vous remercie pour votre aide. :)
Répondre à ce message
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
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
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
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 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 :
Voici ma boucle resultat :
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
les autres input sont des mots clés. Merci de votre aide
Répondre à ce message
J’essaie de faire fonctionner ce plugin mais je n’arrive à avoir les bons résultats, qui ne correspondant pas du tout.
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
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 :
merci !
Il faut que vous remplissiez dynamiquement le tableau mots.
Pour ce faire
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...
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 :
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
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 ».
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 :
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.
Suivre les commentaires : |