Recherche multi-critère par mots-clés

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

http://paul.1formatik.com/rubrique.php3?id_rubrique=1

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 :

Recherche multi-critère par mots-clés

En attente de commentaires...

Dernière modification de cette page le 24 janvier 2007

Discussion

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

  • 1

    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

  • 2
    Maître Dedoy

    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 ?

    • Maître Dedoy

      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

  • 1

    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

  • 6

    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

    • Paul SANCHES

      salut,

      Qu’est-ce que tu souhaites obtenir exactement comme résultats ?

    • Richard S

      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.

    • Gandalve

      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

  • 8

    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 :

    <?php
            $id_rubrique
    =0;
            include (
    "inc-search.php");
    ?>

    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` ADD `is_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.

    • Dom Lepaisant

      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)

    • Paul Sanches

      Tu as mis un mot de passe à ta base de données mysql ?

    • Paul Sanches

      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

    • Paul Sanches

      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+

    • Dom Lepaisant

      Bjr

      il est ici

      A noter que je suis obligé de forcer l’affichage par un recalcul de la page

      Cordialement

      Dom

    • Paul Sanches

      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 :

      <?php
      $fond = "rubzero";
      $delais = 0;
      include ("inc-public.php3");
      ?>

      -  créer un fichier rubzero.html
      qui contient :

      <?php
              $id_rubrique=0;
              include ("inc-search.php");
      ?>


      -  inclure ensuite le code suivant dans sommaire.html, là où vous souhaitez voir apparaitre la recherche multicritères

      <INCLURE(rubzero.php3)>

      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

  • 1

    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 :

    Votre message pour la liste liste-ie-tendances a été rejeté.
    Le message vous est donc renvoyé.
    
    Votre message :
    Received: from siga.inst-elevage.asso.fr (siga.inst-elevage.asso.fr [195.101.239.16])
            by ieparis5.inst-elevage.asso.fr (8.12.5/8.12.5) with ESMTP id j29Ehfmj015336
            for <liste-ie-tendances@ieparis5.inst-elevage.asso.fr>; Wed, 9 Mar 2005 15:43:41 +0100
    Received: from calypso.acta-informatique.fr ([195.101.239.11])
              by siga.inst-elevage.asso.fr (Lotus Domino Release 5.0.11)
              with ESMTP id 2005030913154744:83288 ;
              Wed, 9 Mar 2005 13:15:47 +0100 
    Received: from [172.21.3.13] (localhost [127.0.0.1])
            by calypso.acta-informatique.fr (8.9.1b+Sun/8.9.1) with ESMTP id NAA18167
            for <liste-ie-tendances@inst-elevage.asso.fr>; Wed, 9 Mar 2005 13:25:44 +0100 (MET)
    Message-ID: <422EEA19.3070403@free.fr>
    Date: Wed, 09 Mar 2005 13:20:41 +0100
    From: Caillette-Free <jean.caillette@free.fr>
    User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)
    X-Accept-Language: fr, en
    MIME-Version: 1.0
    To: liste-ie-tendance <liste-ie-tendances@inst-elevage.asso.fr>
    Subject: Tendances 145
    X-MIMETrack: Itemize by SMTP Server on SIGA/Inst-Elevage(Release 5.0.11  |July 24, 2002) at
     09/03/2005 13:15:47,
            Serialize by Router on SIGA/Inst-Elevage(Release 5.0.11  |July 24, 2002) at
     09/03/2005 13:15:48,
            Serialize complete at 09/03/2005 13:15:48
    Content-Transfer-Encoding: 7bit
    Content-Type: text/html; charset=ISO-8859-1
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
    </head>
    <body bgcolor="#ffffff" text="#000000">
    <font size="-1">Le n&deg; 145 de Tendances est disponible<br>
    <br>
    adresse de la page :<br>
    <br>
    <a class="moz-txt-link-freetext" href="http://www.inst-elevage.asso.fr/html1/rubrique.php3?id_rubrique=292">http://www.inst-elevage.asso.fr/html1/rubrique.php3?id_rubrique=292</a><br>
    <br>
    Login : conjoncture-tendances<br>
    <br>
    Mot de passe : EHJWLWWK<br>
    <br>
    Vous en souhaitant bonne lecture.<br>
    <br>
    Le Webmestre<br>
    <br>
    </font>
    </body>
    </html>
    • J’ai fait une grossière erreur de copier-coller ce message est à détruire !
      avec toutes mes excuses

      Jec

    Répondre à ce message

  • 1
    Dom Lepaisant

    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

    • Dom Lepaisant

      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

Qui êtes-vous ?

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