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
merci pour ce bon plugin ! A priori il me permettra de requeter, croiser, filter, extraire la substantifique moelle de ma base (Data Mining).
Pour rendre encore un peu plus accessible aux néophytes de la programmation ce bon pugin, serait il possible d’avoir des modèles à insérer dans l’article où l’on veut récupérer le résultat.
Désolé, je n’ai pas le temps de coder des modèles ... mais regarde le squelette « collection » (zip dispo ici http://files.spip.org/spip-zone/) il doit y avoir quelques exemples
Répondre à ce message
heu .... oui peut -être
après, je n’ai pas forcément le temps, ni les compétence pour le faire ...
et je me deamnde si ce n’est pas détourner un peu le but de ce plugin ...
Avec la pondération il saurait possible d’avoir une suggestion d’article. Dans le même groupe de mots, on peut avoir des mots clefs très généralistes « couleur primaire » que précis « bleu ». Avec une pondération on pourra favoriser les articles liés aux mots « bleu » que « couleur primaire ».
Par contre, ça change tant le fonctionnement du Plug-in qui sera surement préférable de faire un nouveau plug-in qui utilisera le tien et champs extra. D’ici quelques jours je le ferais vu que j’en ai personnellement besoin.
Répondre à ce message
Ça serait possible d’ajouter une pondération à des mots à l’aide d’un champ supplémentaire ?
Répondre à ce message
Bon visiblement il n’est pas compatible SPIP3. Pourquoi il y a le mot cle compatible SPIP3 ?
je viens de le tester et la requete est
or la table spip_mots_articles n’existe plus en spip3, je m’y colle
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 : |