SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Navigation > Recherche > Recherche avancée

Recherche avancée sous SPIP

lundi 13 août 2007, par Viglino Jean-Marc. Dernier ajout dimanche 4 mai 2008


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 :

GIF - 6.6 ko
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 ...


Dernière mise à jour :
- 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)

P.-S.

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é dans votre répertoire « squelettes »...

Documents joints


Répondre à cet article

  • Recherche avancée sur documents

    7 mai 2008 11:50, par George

    Bonjour

    J’essaye d’utiliser la recherche avancee sur les documents rattaches aux rubriques sachant que ces documents utilisent des mots cles du plugin mots partout.

    Je n’arrive pas a limiter la recherche a une rubrique ou a un mot cle. Est-ce possible ou ca ne peut s’appliquer qu’aux articles ?

    Merci d’avance

    George

    Répondre à ce message

    Retour au début des forums

  • Recherche avancée sous SPIP

    19 mars 2008 14:45, par clem

    Bonjour !! nous créeons un site avec un squelette minigrispip et nous avons installer le plugin de recherche avancée. Mais lorsque nous lancons une rechereche avancée, nous nous retrouvons avec ca

     : 1) // Chaine avant $avant = substr($tab[$i][0],-$cc,$cc) ; $mots = split(" ",$avant,2) ; if (count($mots)>1) $avant = $mots[1] ; // Chaine apres $apres = substr($tab[$i][2],0,$cc) ; $apres = preg_replace(’@(.+)\s\S+@s’, ’\1’, $apres) ; // Concatener if ($string_re==’’) $string_re = "[...]" ; $string_re .= " $avant".$tab[$i][1]."$apres [...] " ; // Si rien trouve : renvoyer les premiers mots en resume if ($resume !=’’ && $string_re==’’) $mots = split(" ",$string,40) ; for ($i = 0 ; $i < count($mots)-1 ; $i++) $string_re .= $mots[$i]." " ; if (strlen($string_re)>2*$cc) break ; $string_re .= "[...]" ; return $string_re ;  ?>

    au dessus de notre bandeau...... Quelqun a t’il une solution ????? merci davance !!!!!!!!!

    Répondre à ce message

    Retour au début des forums

  • Recherche sur les documents

    11 mars 2008 13:26, par George

    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

    Répondre à ce message

    • Recherche sur les documents 11 mars 2008 18:22, par Viglino Jean-Marc

      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

      Répondre à ce message

      • Recherche sur les documents 12 mars 2008 12:04, par George

        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 ?

        Répondre à ce message

        • Recherche sur les documents 12 mars 2008 14:11, par George

          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

    Retour au début des forums

  • 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

    Retour au début des forums

  • Recherche avancée sous SPIP dates

    12 novembre 2007 11:48, par Surfingjack

    Bonjour, merci pour le plugin. Il m’est très utile, mais j’aimerais rendre la recherche plus précise dans le temps. Comment faire pour proposer une recherche limitée entre 2 dates choisies par le visiteur ?

    Répondre à ce message

    • Recherche avancée sous SPIP dates 14 novembre 2007 14:37, par Viglino Jean-Marc

      Bonjour,

      Pour cela, il vous faut rajouter des champs au formulaire : dans le fichier formulaires/recherche-avancee.html (à recopier et modifier dans squelettes/recherche-avancee.html) ajoutez les lignes (après la ligne 28) :

      <tr><td>
      <label class="forml"> date 1 </label>
      </td><td>
      <input type="text" class="forml" name="date1" id="date1" value=""/>
      </td></tr>
      <tr><td>
      <label class="forml"> date 2 </label>
      </td><td>
      <input type="text" class="forml" name="date2" id="date2" value=""/>
      </td></tr>

      Il vous faut alors prendre en compte ces champs dans le fichier recherche.html : ligne 57 dans la BOUCLE_articles(ARTICLES), rajoutez les paramètres :


      {date>=#ENV{date1}} {date<=#ENV{date2,"3000-01-01"}}
       

      pour chercher les articles entre date1 et date2. La valeur par défaut "3000-01-01" assure que si date2 n’est pas rempli, on cherche les articles publié avant le 1er janvier 3000...

      Attention, vous devez entrer les dates sous la forme : année-mois-jour (2007-11-14).

      Bon SPIP, jmv

      Répondre à ce message

    Retour au début des forums

  • Recherche avancée sous SPIP

    7 septembre 2007 19:52, par atuttabirra

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

    Norbert

    Répondre à ce message

    Retour au début des forums

  • Recherche avancée sous SPIP

    5 septembre 2007 14:20, par all secu

    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)

    Répondre à ce message

    • version 1.9.3 dev 5 septembre 2007 17:00, par Viglino Jean-Marc

      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...

      Répondre à ce message

      • version 1.9.3 dev 5 septembre 2007 17:09, par all secu

        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

    Retour au début des forums

0 | 25



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net