Recherche avancée sous SPIP

Ajoutez un formulaire de recherche permettant de se limiter à une rubrique, à un mot clé, à une date... affichage Google_like...

Présentation

Vous avez déjà remarqué l’option recherche avancée dans votre moteur de recherche favori... elle vous permet de limiter votre recherche à un certain nombre d’options... Malheureusement, votre SPIP en est dépourvu en standard. Cette contribution va remédier à cet état de fait.

Comment ça marche ?

La recherche de SPIP

Tout d’abord, remarquons que la recherche de SPIP (fichier dist/rechercher.html) est basé sur une boucle :

<BOUCLE_articles(ARTICLES) {recherche} {par points} {inverse} {pagination}>

Restreindre la zone de recherche

Il suffit donc d’y ajouter un argument rubrique pour limiter la recherche à la rubrique en question :

<BOUCLE_articles(ARTICLES){recherche}{par points}{inverse}{rubrique?}{pagination}>

Le « ? » permet de conserver le fonctionnement du squelette d’origine (si aucune rubrique n’est précisée). En fait, on utilisera plutôt {branche?} pour une recherche dans la rubrique et ses sous-rubriques.

Vous pouvez faire l’essai : copier le fichier de la dist dans votre répertoire « squelettes », modifiez le, et lancez une recherche en ajoutant à la fin de la ligne &id_rubrique=1 pour vous limiter à la rubrique 1.

Usage de mot clef

De la même manière, on peut restreindre la recherche à un mot clé que l’on précisera lors de l’appel : {id_mot?}

Selon la durée

Maintenant, cherchons à introduire une condition sur la durée : c’est le critère age qui intervient, mais {age?} ne marchera pas, à moins que l’on ne veuille une date en particulier. On cherche plutôt à avoir tous les articles parus après une date donnée, donc quelque chose comme {age<#ENV{depuis}}depuis a été passé en argument dans la recherche. Mais on perd le comportement initial du squelette (si on ne précise pas l’age en question). J’ai donc choisis une valeur par défaut : {age<#ENV{depuis,1E100}} en espérant que personne n’aura écrit un article il y a plus de 1E100 jours ;-)

Par points

Enfin, notons que la recherche est triée par points, mais que l’on peut assez facilement utiliser un tri différent : {par #ENV{tri, points}} en utilisant une variable passée dans l’environnement.

On peut donc facilement ajouter quelques critères à sa recherche SPIP.

Il reste à définir un formulaire pour envoyer la requête facilement...

Un formulaire de recherche avancée

Le formulaire en question est utilisé en lieu et place du formulaire standard dans le squelette de la recherche, à condition que l’option avancee=1 lui ait été envoyée. Il se présente ainsi :

Formulaire de recherche avancée

Il a été placé dans le fichier formulaires/recherche-avancee.html afin que vous puissiez le modifier plus facilement et introduire les spécificités propres à votre site, car suivant la configuration de celui-ci, le nombre de rubriques ou de mots clé, vous aurez peut-être à le modifier, au risque d’avoir des menus à rallonge ou des critères qui ne vous satisferont pas.

Et pour y accéder plus facilement, j’ai placé un lien dans le fichier formulaires/recherche.html de la dist.

Finalisation

Mais que serait une bonne recherche sans une bonne présentation ? Pour cela, j’y ai introduit un filtre google_like (voir Google Like et Google Like II) et j’ai transformé les points SPIP en pourcentage plus lisible pour le commun des mortels.

Il ne restait plus qu’à ajouter deux image pour donner un peu de couleurs, faire un fichier de style pour une meilleur intégration dans votre site, mettre une icône dans la barre de recherche standard, un fichier de langue pour les traductions et à empaqueter le tout dans un plugin pour faciliter l’installation...

Et voilà le résultat ...

Remerciements

Merci à J-Ph Guihard pour la validation du code html, css et le passage en SPIP v2.xx, suite aux remarques sur le forum


Dernière mise à jour :
-  04/10/2010 Validation html et css, mise à jour du code pour SPIP 2.xx par J-Ph Guihard
-  19/01/2009 Ajout d’options sur les mots-clés (par groupe ou sans le mot clé...)
-  04/05/2008 Bug dans le fichier recherche_avancee_fonctions.php
-  05/09/2007 Problème d’affichage en version 1.9.3 dev
-  29/08/2007 Gestion des Résultats dans la langue de la requête suite aux remarques d’Abelass.
-  13/08/2007 Première version (1.9.2b)

Attention, ce plugin reprend et modifie les fichiers recherche.html et formulaires/recherche.html de la dist, veillez donc à ne pas les avoir déjà surchargés dans votre répertoire « squelettes »...

Discussion

50 discussions

  • 3

    Bonjour

    Est-il possible d’etendre la recherche pour inclure les titres et descruptifs des documents joints, sachant que des mots-cle leurs sont associes via le plugin mots partout ?

    Merci d’avance

    • Bonjour,

      A priori, les titres des documents sont indexé par le moteur de recherche standard de SPIP (voir plugin Recherche Etendue). Chez moi, cela fonctionne : je trouve les articles sur le nom du document qu’ils contiennent (dans le porte folio)
      Je ne sais pas ce qu’il en ait des mots-clé...

      @+
      jmv

    • En fait, moi j’ai des documents joints a des rubriques et je voudrai afficher les titres des documents trouves plutot que la rubrique a laquelle ils sont attaches.

      J’ai mis une boucle documents dans le fichier recherche mais elle ne donne rien.

      C’est bizarre que la recherche trouve des sites syndiques et affiche leur URLs mais pas des documents.

      Une suggestion ?

    • Je me repond

      J’ai ajoute un boucle document dans la boucle rubrique sous le titre « Voir aussi les Rubriques » et maintenant j’ai les titres de mes documents.

      J’espere que ce n’est pas trop lourd.

    Répondre à ce message

  • 2

    Est-il possible de paramétrer soit le plugin, soit le squelette afin de rechercher sur une table externe à SPIP ?

    Quelles sont les champs sur lesquels s’effectue l’indexation qui permet ensuite de faire la recherche ? Les champs extra sont-ils indexés pour la recherche ?

    Ces deux questions sont légèrement disjointes mais mon besoin est de porter sur SPIP une FAQ dynamique questions / réponses / date de la question.
    J’ai tout celà dans une table externe simple à 3 champs + identifiant clé primaire
    Mon objectif est d’intégrer dans SPIP un plugin de gestion de questions DP (site syndical)

    Répondre à ce message

  • 4
    atuttabirra

    Est-ce qu’il y a une version de ce plugin très intéressant pour spip 1.9.2b ?

    Norbert

    • La version est présentée en 1.9.2b (c’est celle que j’utilise). Elle a été testée en version 1.9.3 dev par all secu.

    • atuttabirra

      Dans mon site avec la version 1.9.2b le formulaire n’apparaît pas. Lorsqu’on clique sur « recherche avancée » rien ne se passe.

      Norbert

    • Êtes-vous sûr que votre squelette ne surcharge pas le fichier de recherche (y-a-t’il un fichier squelettes/recherche.html) ? Sinon, c’est ce fichier qui sera utilisé à la place de celui du plug-in...
      (voir installation à expliquer svp et Recherche avancée et alternatives)

    • atuttabirra

      En effet ! Il y avait surcharge. Etant donné que je suis au début je ne comprenais pas bien le sens de la remarque. J’ai remplacé le fichier squelettes/recherche.html avec celui du plug-in. Le formulaire apparaît et il fonctionne. C’est vraiment très bon. Merci beaucoup.

      Norbert

    Répondre à ce message

  • 2

    bonjour,

    Suite à la mise à jour, il semble qu’il y ait un problème avec spip 1.9.3 dev, le formulaire n’apparait plus comme il faut avez vous une idée de l’origine du problème svp ( résultat)

    • Désolé, je n’ai pas (encore) installé la 1.9.3...

      Mais j’ai peut-être une idée sur le problème qui se pose et j’ai fait une reprise que vous pouvez tester en téléchargeant la dernière version jointe à l’article...

    • re,

      Ca marche nikel avec la 1.9.3 ( y’a juste un petit soucis de mise en page pour la liste des rubriques mais c’est négligeable et à vrai dire ce n’est pas le plus important . Je regardes dès que j’ai un momment)

      Merci

    Répondre à ce message

  • 3
    abelass

    Merci beaucoup pour ce plugin très util et facilement adaptable.

    Afin d’avoir les résultats dans la langue correspondante (celle de la page où la requête est faite)

    j’ai rajouté dans recherche_avancee/formulaires/recherche_avancee.html

    <input name='lang' value='#ENV{lang}' type='hidden' />

    après

    <input name='page' value='recherche' type='hidden' />
    <input name='avancee' value='1' type='hidden' />

    et

    remplacé dans recherche_avancee/formulaires/recherche.html

    <a  href="?page=recherche&avancee=1&recherche=#RECHERCHE">

    par

    <a  href="?page=recherche&avancee=1&lang=#ENV{lang}&recherche=#RECHERCHE">

    et j’ai évidemment rajouté dans recherche_avancee/formulaires/

    les fichiers de langues necéssaires : http://www.protectionline.org/plugi...

    Voir : http://www.protectionline.org/spip....

    Rainer

    • Bonjour,

      Ce plugin est-il compatible avec Google Ajax Search ? Autrement, comment faire pour utiliser le moteur de recherche google à la place de la recherche Spip ? J’ai remarqué que mon site est plus rapide avec le moteur Google...

    • A priori, le plugin Google Custom Search est totalement indépendant du formulaire de recherche SPIP... Ce sont donc deux façon de faire différentes... à vous de choisir

    • Je l’ai intégré à la v0.2

      merci jmv

    Répondre à ce message

  • 1
    zerocool

    Bonjour,
    comment peut on retirer des groupes de mot clé ou simplement des mots clé dans la recherche avancée ?
    Merci

    • Recopiez le fichier formulaires/recherche-avancee.html dans votre répertoire squelettes/formulaires et modifiez la boucle affichant les mots-clés (ligne 61) :

      <BOUCLE_surmot(MOTS)>

      par :

      <BOUCLE_surmot(MOTS){id_groupe!=xx}>

      Les mots-clé du groupe xx ne s’afficheront plus...

      Voir également autres critères de sélection des mots-clés sur : http://www.spip.net/fr_article909.html

      De la même manière, en modifiant la boucle des rubriques (<BOUCLE_surrub(RUBRIQUES){racine}>) vous pouvez étendre la recherche à des rubriques spécifiques, etc.

    Répondre à ce message

  • 1

    Bonjour !
    Super ce plugin.Cependant le temps de réponse des recherches est très long > 30 secondes.
    D’ou pourrait venir le problème ? Sans le plugin les réponses sont rapides.
    Merci
    Nicolas

    • Bonjour,
      La recherche avancée fait plus de calcul que la recherche normale (calcul des points, affichage des mots clés, filtre google)... Peut-être que cela vient de là... (30 secondes me paraît beaucoup).

      Utilise la variable var_profile (à ajouter en fin de ligne de dans le navigateur : spip.php?page=recherche&...&var_profile) pour afficher les temps de calcul dans les boucles et voir d’où vient le problème. Sinon, tu peut désactiver certaines fonctionnalités dans le fichier recherche.html...

      As-tu une url à donner ?

      @+
      jmv

    Répondre à ce message

  • 4
    allsecu

    bonjour,

    tout d’abord merci pour ce plugin bien utile .

    J’ai un petit bug avec spip 1.9.3dev+ alternatives :

    -  DOUBLE OCCURENCE HEAD
    -  JQUERY fonctionne mal pour les autres plugins

    Sinon j’essaye de l’intéger dans une balise div pour mon site et ca force la dist ?
    Est-ce normal ?

    Enfin puis-je appeler le formulaire de recherche par une balise (par exemple pour afficher le formulaire de recherche avancée de la page d’accueil) ?

    Merci d’avance et encore félicitation pour le plugin

    (Ps : pas de lien car du coup le plugin n’est pas encore activé car en test)

    • Bonjour,

      je n’ai (encore) pas testé la 1.9.3, désolé, mais a priori, le plugin ne fait que surcharger la recherche de SPIP et introduire un fichie css dans le head...

      Je n’ai pas jugé bon de créer de balise pour intégrer le formulaire, il faut donc faire un INCLURE :

      <INCLURE{fond=formulaires/recherche-avancee}{recherche}{avancee}
      {depuis}{id_mot}{id_rubrique}{tri}{titre}>
    • all secu

      merci pour la réponse apparamment ca a l’air de fonctionner en rajoutant compat193 pour le rendre compatible avec les anciennes versions . Cependant, pour l’include, il me manque le bouton d’envoi ?!! Et est-ce normal que je n’arrives pas à l’adapter à alternatives mais seulement avec la dist ?!!

      Merci d’avance

    • Attention, le squelette alternative surcharge recherche.html qui sera prioritaire par rappport au plugin... Remplacez celui du répertoire squelettes par celui du plugin ou reprenez celui d’alternatives en fonction du plugin (rajouter le include ligne 28-37 du plugin). Une autre solution, je pense qu’on peut mettre une majuscule au répertoire du plugin Recherche avancée : il sera alors avant le plugin alternatives (R<a<r) dans la liste des plugins (mais je n’ai pas testé la compatibilité).

      Bouton d’envoi manquant : peut-être un pb dans un css... (un hidden qui traine dans un .formulaire_spip .bouton...)

    • allsecu

      bonjour,

      j’ai résolu le problème du bouton caché mais il me reste un dernier soucis : sous Internet Exploreur, l’affichage du formulaire est aléatoire et dépasse ma mise en page . J’ai bien essayé de modifier les fichiers du formulaire pour forcer la taille des colonnes à 350 au lieu de 500 mais rien n’y fait.....

      Auriez-vous une petite idée svp ?

      Merci d’avance

    Répondre à ce message

  • 1

    Bonjour
    Je crois qu’Un minimum serait de mettre un p’tit paragraphe sur « comment installer ce plugin » qui est un peu particulier...
    -  faut-il remplacer le fichier rechercher.html d’origine par celui du plugin, aprés l’avoir installé ?
    -  si en plus un squelette était dèjà installé, comment les fichiers formulaires du squelette vont se comporter ?

    ...etc

    Dommage que n’ayant pas réponses à ces questions, j’ai dû désinstaller ce plugin qui me semble trés interessant. Le lien « recherche avancé » m’affiche une magnifique page toute blanche.

    Dans l’attente de pouvoir utiliser votre magnifique travail... merci.

    • Comme indiqué dans l’article, le plugin surcharge les fichiers recherche.html et formulaire/recherche.html de la dist...

      Si vous les avez déjà surchargés dans un squelette, ce sont les votres et non ceux du plugin qui seront utilisés... normal, c’est le principe de base des squelettes de pouvoir être personnalisés...

      Vous avez donc le choix de ne pas les surcharger (les supprimer du squelette) ou recopier ceux du plugin dans votre dossier squelettes... et en profiter pour les modifier si le cœur vous en dit...

    Répondre à ce message

  • Bonjour,
    J’utilise ce plugin (merci !) pour forcer la réindexation de mes nouvelles tables. Est-il nécessaire de rajouter les éléments au tableau $INDEX_elements_associes ? Si je ne fais pas, sur la page ?exec=admin_index le bargraph des tables qui n’ont pas été définies reste sur « Indexation de la table non configurée »...

    Merci d’avance,
    A+
    Cyril

    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