Cette contribution a 3 objectifs :
Le premier est de proposer une recherche multi-critère par mots-clés sur les articles d’un site spip.
Le second est de permettre de placer dans n’importe quelle page de rubrique d’un site spip une recherche multicritère avec les groupes de mots-clés que l’on veut.
Le troisième est de pouvoir créer une page indépendante du site spip, c’est-à-dire une page de recherche multicritère qui n’est liée à aucune rubrique particulière (ca peut être dans un squelette article par exemple).
Exemple :
Dans une rubrique nommée emploi, on peut avoir une recherche avec 3 groupes de mots-clés :
- offres d’emploi
- formation
- offres de stages
On peut aussi avoir une page (que l’on nomme formulairemot.php3 et qui va avec formulairemot.html) qui n’est associée à aucune rubrique, regarder l’image :
Bien évidemment la recherche se fait sur les mots clés du groupe et non sur le groupe pour faire une recherche sur le groupe il faut sélectionner tous les mots clés du groupe.
Lien de démo
Installation
Vous trouverez ci-joint 5 fichiers :
AddGroupmotDsRub.php
(permet d’ajouter un mot ou plusieurs groupes de mots-clés aux rubriques de votre site, il permet aussi d’effacer un ou plusieurs groupe de mots-clés attachés à une rubrique.)
requete.php
Crée la table spip_rubriques_groupes dans mysql automatiquement, ce fichier s’autodétruit une fois la table créée.
inc-search.php
(c’est le formulaire de recherche à inclure dans vos squelettes)
searchresult.php3 et searchresult.html
(C’est la page de resultat, on peut présenter les résultats soit par Rubrique soit par mots-clés.)
1e étape :
Placer dans votre répertoire ecrire les fichiers :
requete.php
AddGroupmotDsRub.php
Placer dans votre site SPIP à la racine, les 3 fichiers :
inc-search.php
searchresult.php3
searchresult.html
2e étape :
Il suffit de faire un include dans votre squelette rubrique, là où vous souhaitez voir apparaître le formulaire de recherche multicritères.
Ajouter le code suivant :
<?php
include ("inc-search.php");
?>
3e étape :
Créer la table mysql : spip_rubriques_groupes
Pour cela, aller à cette adresse :
http://www.monsiteweb.fr/ecrire/requete.php
La table est alors créée et vous êtes redirigé vers la page AddGroupmotDsRub.php, qui vous permet de choisir les groupes de mots-clés à associer à telle ou telle rubrique. Attention, vous devez vous être connecté à l’espace privé pour pouvoir faire les modifications.
Si la table n’a pas pu être créée automatiquement, exécuter cette requête à l’aide de phpmyadmin sur mysql :
CREATE TABLE spip_rubriques_groupes
(
id_groupe
bigint(21) NOT NULL default ’0’,
id_rubrique
bigint(21) NOT NULL default ’0’,
KEY id_groupe
(id_groupe
,id_rubrique
)
) TYPE=MyISAM ;
Allez ensuite à l’adresse : http://www.monsiteweb.fr/ecrire/AddGroupmotDsRub.php à l’aide de votre navigateur web et selectionnez les groupes de mots-clés que vous souhaitez attacher à une rubrique.
Vous retrouverez dans le menu déroulant des rubriques le champs multisearch, c’est en fait la rubrique 0 qui n’est attachée à aucune rubrique.
Attention : il est impératif, pour voir fonctionner cette contrib, d’avoir créer au préalable des mots-clés dans l’interface privée et d’associer certains de ces mots-clés ou tous à des articles
Et pour finir, allez dans la rubrique où vous avez décidez de proposer une recherche multicritères et testez.
En option
Vous pouvez avoir besoin d’utiliser un formulaire avec une recherche multicritère ailleurs que dans une rubrique, il faut alors :
- Ajouter un champs à spip_groupes_mots, exécuter alors la requête suivante dans phpmyadmin ou équivalent :
ALTER TABLE spip_groupes_mots
ADD is_multisearch
TINYINT DEFAULT ’0’ NOT NULL ;
- Ajouter le code suivant dans le squelette qui n’est lié à aucune rubrique particulière (ca peut être dans un squelette article par exemple).
<?php
$id_rubrique=0;
include ("inc-search.php");
?>
Cette contribution a totalement été revue, elle a été testée sur SPIP 1.7, 1.7.1, 1.7.2 et 1.8b2.
Elle utilise maintenant les fichiers de connection de SPIP, elle est donc secure. Autres avancées, on ne modifie plus du tout le noyau de SPIP et la table supplémentaire est créée automatiquement.
Cette contribution a été testé avec les navigateurs suivants :
- Firefox, safari, mozilla, IE sous mac os x 10.3.6 (merci à Karim Belkacem et Yorghos)
et Firefox, IE sous windows XP et 2000.
Je mets le zip ici :
En attente de commentaires...
Discussions par date d’activité
35 discussions
J’ai découvert il y a peu via les messages ci-dessous qu’il y avait sur le site du développeur une version plus récente :
http://www.netdeveloppeur.com/tutoriaux-et-astuces-spip/spip-recherche-multicriteres-article34.html
Une belle amélioration est de pouvoir valider le critère "Tous les mots doivent être présents" (parfait pour mon usage).
Seulement j’aimerai pouvoir faire une sélection différente :
Que tous les mots-clef, à l’intérieur d’un groupe, se cumulent ( « et/ou » au lieu de « et », à l’intérieur de chaque groupe de mots-clef ).
Par exemple, avec 2 groupes de mots-clef et 2 mots-clef dans chaque :
En l’état (avec $allword = 1) :
Resultat = ( mc1G1 et mc2G1 ) et ( mc1G2 et mc2G2 )
En l’état (avec $allword = 0) :
Resultat = ( mc1G1 et/ou mc2G1 ) et/ou ( mc1G2 et/ou mc2G2 )
J’aimerai (et n’arrive point à le faire) avoir :
Resultat = ( mc1G1 et/ou mc2G1 ) et ( mc1G2 et/ou mc2G2 )
D’avance merci aux éventuels champions du php...
Hubert
Répondre à ce message
Bonjour,
Savez-vous si cette contrib est adaptable aux dernières versions de SPIP ? Ou s’il en existe une équivalente ?
Merci d’avance
—
S@m
Je me pose la même question !
J’ai essayé avec SPIP 1.9.1
Problème : Le fichier AddGroupmotDsRub.php contient la ligne de code suivante :
include (« inc.php3 »)
Or il n’y a plus de fichier inc.php3 !
Répondre à ce message
bonjour
je dois realiser un site concernant la vente de livre, avec le logiciel NAMO .
ma premiere question est la suivante puis je inserer ces lignes alors que namo est en HTML ?
Répondre à ce message
Bonjour, cette contrib est tout à fait magnifique !
Je suis en train de réaliser un petit site en intranet chez moi sur des recettes de cuisine. Cette contrib me permettrait de sélectionner les différents ingrédients (=mots-clés) que j’ai en ma possession et de voir les recettes que je peux faire avec cela.
Mais voilà. Je n’arrive pas à ajouter les groupes de mots-clés à tout le site (rub=0). Il n’y a qu’en sélectionnant une rubrique (rub !=0) que les groupes de mots-clés s’affichent correctement. Sinon rien rien est affiché...
Comment faire ?
Je viens de trouver la raison grâce à une des réponses plus bas. Il faut mettre 0 à la place de ’0’ sinon erreur mysql.
De plus, je voudrais savoir s’il est possible de classer par ordre alphabétique les mots-clés au lieu du classement par id_mot ?
Si je me souviens bien, dans « inc-search.php », il faut remplacer « order by ...id_mot,... » par « order by spip_groupes_mots.titre, spip_mots.titre » dans les $sql.
Sur mon site, ça fonctionne :
Répondre à ce message
Bonjour
j’aimerais faire en sorte que les résultats d’une recherche multicritère (génial la contrib’ au passage) soient différents... Je souhaiterais avoir tous les articles avec TOUS les mots cléfs, puis TOUS les articles avec un mots clés et éventuellement en fin de page les articles avec un seul mot clé, mais ensemble, et donc pas comme présentement éclaté en fonction des rubriques. Est ce possible ?
Cordialement
Christophe Noisette
www.infogm.org
Tu peux déjà faire ça avec le script, c’est ce qu’il fait par défaut, il présente d’abord les articles qui ont tous les mots-clés...
Tu peux trier les résultats de 2 façons : soit par ID de rubrique, ce qui ne sert pas à grand chose d’ailleurs, soit par nombre de mots clés trouvés.
Je suis en train de repencher dessus pour l’améliorer notamment suite au demande de « et » exclusif et je vais ajouter la possibilité de limiter par date d’articles et correction du bug des titres d’articles quand tu mets 10.espace ou un .espace dans le titre, celui-ci est coupé.
Voilà à surveiller pour une mise à jour prochaine.
@+
Paul
Répondre à ce message
bonjour
lorsque l’on insere le inc-search.php3 dans une rubrique N
peut-on restreinte facilement la recherche dans cette rubrique seulement ?
apparement la recherche se fait sur la totalité du site.....
Répondre à ce message
Bonjour,
Pour ma part, j’ai un petit problème avec cette contribution. Quand je sélectionne un mot-clé dans chacun des groupes j’ai toute la combinaison des possibles qui s’affiche. cf. lien
le lien c’est ici
salut,
Qu’est-ce que tu souhaites obtenir exactement comme résultats ?
Et bien, je souhaite ne voir apparaître que les résultats conditionnés par ET et non par ET puis par OU.
Ok je vois, laisse-moi voir si c’est facilement faisable et si oui je le ferai.
Super ! Merci.
J’attends patiemment une réponse ...
C’est vrai que l’idéal c’est d’avoir des résultats avec uniquemùent ET comme condition.....
Répondre à ce message
Bonjour je découvre SPIP. J’ai installé la version 1.7.2 en local avec EasyPHP. J’ai souhaité tester votre contrib multi-critères et je me heurte à un certain nombre de problèmes que je suis incapable de corriger.
Mon site est organisé en 4 rubriques : R1, R2, R3 et R4. Dans ces rubriques un certain nombre d’articles auxques sont attachés des mots clés organisés en groupe : GMC1, GMC2 et GMC3.
Je souhaite avoir un formulaire qui me permette de retrouver un article en sélectionnant un ou plusieurs mots clés indépendamment des rubriques.
J’ai donc suivi la contribution livrée dans spip-contrib.net :
J’ai placé dans votre répertoire ecrire les fichiers :
requete.php
AddGroupmotDsRub.php
J’ai placé à la racine, les 3 fichiers :
inc-search.php
searchresult.php3
searchresult.html
J’ai écrit dans le fichier FormulaireMot.php3 (à la racine de mon site) les lignes suivantes :
J’ai créé la table spip_rubriques_groupes à partir de requete.php
puis j’ai lancé AddGroupmotDsRub.php. Là ne sachant pas trop, dans chaque rubrique, j’ai coché toutes les cases. J’ai aussi tout coché dans la partie ’multisearch’
J’ai voulu alors lancer : http://www.monsite/FormulaireMot.php3 et j’ai obtenu l’erreur suivante :
Warning : Acc�s refus� pour l’utilisateur : ’ODBC@localhost’ (mot de passe : NON) in c :\program files\easyphp\www\inc-search.php on line 9
Warning : MySQL Connection Failed : Acc�s refus� pour l’utilisateur : ’ODBC@localhost’ (mot de passe : NON) in c :\program files\easyphp\www\inc-search.php on line 9
Warning : MySQL : A link to the server could not be established in c :\program files\easyphp\www\inc-search.php on line 9
il n’y a pas de groupe de mots associ�s � cette rubrique : 0
Je me suis dit qu’il fallait peut-etre installer l’option de la contrib.
J’ai exécuté la requete : ALTER TABLE
spip_groupes_mots
ADDis_multisearch
TINYINT DEFAULT ’0’ NOT NULL ;(j’ai été obligé de mettre 0 à la place de ’0’ pour ne pas avoir d’erreur)
J’ai relancé : http://www.monsite/FormulaireMot.php3 avec toujours la même erreur.
Que faut-il faire ? Je ne sais pas vraiment.
Auriez-vous une idée ?
Merci de votre aide.
Philippe Le Roy.
As-tu recalculé ta page ou bien vidé le cache.
J’ai eu le même message d’erreur et un simple recalcul et tt est rentré ds l’ordre
Dom
J’ai vidé la cache à partir de l’interface d’administration (et par sécurité directement depuis l’explorateur).
Mais j’ai toujours les mêmes erreurs qui apparaissent.
Pourrais-tu me filer ton fichier multicritere.php3 et m’indiquer à quel en droit de ton arborescence tu le positionnes ?
Merci de ton aide.
Philippe Le Roy (leroy.philippe@laposte.net)
Tu as mis un mot de passe à ta base de données mysql ?
En fait il ya bien un problème avec la recherche indépendante d’une rubrique.
Il faut pour qu’elle fonctionne, que tu mettes dans la TABLE « spip_groupes_mots » le champs « is_multisearch » à 1 pour chaque groupe de mots. Et là, je te garantie que ça marche.
Faut que je trouve une soluce automatique
J’ai trouvé :
la solution, il suffit dans le fichier inc-search.php, ligne 7 de remplacer : where is_multisearch = 1 par where is_multisearch = 0
et c’est tout, plus besoin de mettre tout à 1.
Merci de t’intéresser au problème mais ça ne fonctionne toujours pas. J’ai toujours les mêmes erreurs qui apparaissent. J’ai tenté de renommer le inc_search.php en inc_search.php3 mais sans succès.
J’ai tenté de tout réinstaller, mais lors de la restauration, (meme en prenant soin de lancer le script requete.php avant la restauration), j’avais pas mal d’erreur.
Je continue mes recherches.
A+
Bjr
il est ici
A noter que je suis obligé de forcer l’affichage par un recalcul de la page
Cordialement
Dom
Salut,
Quand vous souhaitez utiliser la recherche multicritères sur une page indépendante d’une rubrique comme par exemple la page sommaire.html :
- créer un fichier rubzero.php3
qui contient :
- créer un fichier rubzero.html
qui contient :
- inclure ensuite le code suivant dans sommaire.html, là où vous souhaitez voir apparaitre la recherche multicritères
Et voilà vous obtenez normallement une recherche multicritères par mots-clés sans avoir à recalculer à chaque fois la page sommaire.
Répondre à ce message
Bonjour,
il y a sûrement quelquechose que j’ai loupé quelquepart !
qui pourra m’aider ?
Merci d’avance
Jean
Voci le message que j’obtiens :
J’ai fait une grossière erreur de copier-coller ce message est à détruire !
avec toutes mes excuses
Jec
Répondre à ce message
Ca, c’est une contrib du tonnerre de dieu !
Je viens d’installer à l’instant en local sous Easy Php sans problème et pour mon site, ce sera vraiment d’une utilité terrible (+ de 100 mots-clé)
Je fignole un peu et je mets en ligne
Que du bonheur
Merci beaucoup
Dom
On peut voir le résultat ici
La page de résultats n’est pas encore CSSisée.
- Le tout, depuis le téléchargement jusqu’à affichage sur le site m’a pris au bas mot 1 heure .
- Je vais maintenant essayer de l’adapter à la page d’accueil de mon site.
Merci encore à Paul pour cette exellente contrib
Dom
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 : |