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}} où 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)



Recherche avancée
Vos commentaires
# Le 11 janvier à 13:17, par banto palmarino
En réponse à : Recherche avancée sous SPIP
Bonjour,
J’ai développé un site internet d’utiliser le plugin « Recherche multi-critère par mots-clés »
mais elle était incompatible nouvelles versions de SPIP et a vu la « Recherche avancée »
comme une bonne solution.
Donc je me demandais si vous pouviez m’aider, parce que je veux sur le mot-clé, au lieu il ya
de lister tous les mots clés de tous les groupes de mots clés, séparés font
par groupe et par où l’on peut choisir un mot clé à partir d’un groupe ou une combinaison
mot-clé pour chaque groupe de mots-clés ? Quelqu’un at-il cette fois ?
Merci !
# Le 11 janvier à 14:18, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
L’affichage des mots clés se fait dans le formulaire de recherche (fichier
formulaires/recherch_avancee.html). Il y a là une boucle (_surmot) qui « choisi » les mots-clés sur lesquels faire la recherche (dans le plugin, cette boucle affiche tous les mots-clés).Vous pouvez copier ce fichier dans votre répertoire squelettes/formulaires et modifier le comportement de la boucle pour afficher les mots-clés autrement.
Par exemple pour limiter aux mots-clés des groupes 2 et 3 :
@+
# Le 11 janvier à 16:33, par banto palmarino
En réponse à : Recherche avancée sous SPIP
et si vous avez trois groupes de mots-clés et de créer trois nouveaux champs au lieu d’un ? J’ai essayé d’ajouter deux fois plus et en ajoutant les mots limiter_mot id_groupe dans 1, 2 id_groupe IN IN id_groupe et 3, et est apparue dans le squelette que je veux, mais il ne fonctionne que le premier : (
# Le 12 janvier à 09:43, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Le problème est que les 3 mots-clés ont le même nom (
name="id_mot"dans les select).Au final, un seul est envoyé à la page
recherche.html.Vous devez avoir un nom pour chaque select afin de pouvoir les récupérer et modifier le fichier
recherche.htmletrecherche_articles.htmlpour tenir compte de ces mots.Si vous avez 3 mots-clés (id_mot, id_mot2 et id_mot3), le code dans
recherche_articles.htmlsera :... avec le problème qu’il faut sélectionner au moins un mot-clé car le paramètre optionnel
{id_mot?}ne marche plus (ou alors il faut faire un test dansrecherche.htmlcomme pour la gestion de la note_ponderee qui renvoie vers un squelette différent)...En espérant que cela peut vous être utile...
@+
# Le 15 janvier à 17:46, par banto palmarino
En réponse à : Recherche avancée sous SPIP
Il a travaillé, merci !
est de changer le filtre generer_url_site par generer_url_entite sur la ligne 150 du fichier recherche.html
Répondre à ce message
# Le 19 décembre 2011 à 15:39, par Abel
En réponse à : Recherche avancée sous SPIP
Bonjour et encore merci pour ce plugin !
J’ai installé ce plugin avec le plugin Fulltext et cela marche du tonnerre !
Cependant la présentation des résultats « Google Like » ne semble pas compatible avec les recherches booléennes. Par exemple sur la recherche « Il fait beau », il va présenter un extrait de l’article pour chaque mot demandé sans prendre en compte les guillemets ce qui peut troubler le visiteur.
J’aurai besoin de présenter un seul extrait de l’article présentant la séquence entière demandée, mais je ne vois pas comment faire...
En 2 mots : comment rendre compatible la présentation « Google Like » avec les opérateurs booléens du plugin « Fulltext » ?
Merci beaucoup ! ^^
# Le 5 janvier à 09:25, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Désolé de répondre si tard (vacances de Noël oblige).
La solution se trouve dans le fichier « recherche_avancee_fonctions.php ». Le reformatage dans la fonction recherche_avancee_google_like découpe la recherche :
$qt = explode(" ", $query);et on surligne mot par mot...Il faudrait un découpage plus intelligent pour conserver les guillemets...
@+
# Le 9 janvier à 11:40, par Abel
En réponse à : Recherche avancée sous SPIP
Merci pour cette réponse.
Répondre à ce message
# Le 4 octobre 2011 à 21:14, par bonyface
En réponse à : Recherche avancée sous SPIP
Bonjour,
Super plugin ! Mais je fais fasse à un petit problème avec le filtre « google like » : tous les caractères spéciaux disparaissent (é|è|ê->e, ç->c, à->a...). Une solution, une idée ?
Autre petit désagrément, si l’on clique sur le lien « recherche avancée » depuis le formulaire de recherche, la chaîne saisie dans le champ recherche n’est pas transmise à la page de résultat dans le formulaire de recherche avancée (paramètre recherche vide dans l’url « &recherche= »).
# Le 5 octobre 2011 à 09:06, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
La recherche se fait (et s’affiche) sans accent... désolé...
Si vous faite une recherche (normale) et qu’ensuite vous cliquez sur recherche avancée, la chaîne de recherche est conservée. Si vous cliquez sur recherche avancée c’est la page vierge de la recherche qui s’affiche.
@+
Répondre à ce message
# Le 1er octobre 2011 à 21:33, par Mahiiro
En réponse à : Recherche avancée sous SPIP
Bonjour,
J’ai déjà un peu travaillé avec SPIP mais je ne maitrise pas encore bien le langage. Je souhaiterai inclure dans mon site une rubrique qui serait uniquement composé de la recherche avancé, comme on voit dans marmiton.org par exemple, mais garder le « rechercher » simple sur le coté. Je pensais donc créer un article de forme spéciale : article_rechercheavance ( ça je sais faire ) et inclure le formulaire à l’intérieur de cet article, mais je ne sais pas comment faire ceci. Pouvez vous m’expliquer comment faire, ou m’indiquez une meilleure méthode pour réaliser ce projet ?
Cordialement.
# Le 3 octobre 2011 à 08:48, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Il existe déjà une page dédiée à la recherche, c’est http://mon-site/spip.php?page=recherche&avancee=1. Il suffit de faire un lien dessus.
Je ne vois pas trop l’intérêt d’une rubrique dédiée à la recherche mais bon... la solution est ici : http://www.spip.net/fr_article3445.html.
Il vous suffit de créer un fichier rubrique=xx.html dans votre répertoire squelettes (où xx est le numéro de la rubrique de recherche) et d’y inclure la page de recherche avancée.
Un truc comme cela doit marcher en v2 :
@+
Répondre à ce message
# Le 26 septembre 2011 à 16:33, par Kevin
En réponse à : Recherche avancée sous SPIP
Bonjour à tous,
Je n’utilise pas ce plugin mais je sais pas trop où poser ma question... Je vous explique : j’ai un plugin Contacts et j’aimerais que lorsque l’utilisateur lance une recherche, elle se fasse aussi au sein de la table spip_contacts du plugin.
Pour cela, j’ai utilisé plusieurs pipelines : rechercher_liste_des_champs, declarer_tables_objets_surnoms.
J’ai également ajouter une boucle sur la table spip_contacts dans le squelette recherche.html :
Contact #NOM_ORGANISATION
Mais la recherche ne retourne rien. Pourtant je lance la recherche avec un nom de contact existant dans la base.
Quelqu’un parmi vous aurait eu ce genre de problème ? Un nouvel objet éditorial avec une recherche dessus mais sans résultats...
Je vous remercie.
# Le 26 septembre 2011 à 17:18, par jm
En réponse à : Recherche avancée sous SPIP
Bonjour,
C’est bien le pipeline rechercher_liste_des_champs, voir ici :
http://www.mail-archive.com/spip@rezo.net/msg11453.html
ou ici http://programmer.spip.org/rechercher_liste_des_champs
@+
Répondre à ce message
# Le 3 février 2011 à 13:20, par Abel
En réponse à : Recherche avancée sous SPIP
Bonjour et merci pour ce plugin, je voudrais cependant y apporter une modification mais je n’y arrive pas mes compétences étant limitées sur le sujet.
j’aurai besoin, pour un projet, d’ajouter une recherche, non pas sur la date de publication, mais sur la date de rédaction antérieur.
Du coup, et comme les dates des documents en question peuvent être assez anciennes (1750 ou 1830, par exemple, les champs « 3 derniers mois » ou « l’année dernière » ne fonctionnent plus. Il faudrait, pour bien faire remplacer le menu déroulant par deux champs où l’on pourrait entrer deux dates afin de faire une recherche, par exemple, sur les articles écrits entre 1875 et 1879.
Si quelqu’un a une piste vous me seriez d’un grand secours.
Merci !
# Le 3 février 2011 à 14:25, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Dans le fichier formulaires/recherche-avancees.html,
il faut définir deux champs à la place du menu déroulant qu’il y a ligne 30 à 39...
Dans le fichier recherche_articles.html, il faut ajouter les critères qui exploitent ces champs :
en lieu et place de :
Attention cependant à bien rentrer les dates...
@+
# Le 3 février 2011 à 15:29, par Abel
En réponse à : Recherche avancée sous SPIP
Génial !
Merci pour cette réponse extrêmement rapide !
Le code que vous m’avez donné fonctionne à merveille.
Cependant il faut entrer, dans les champs, la date complète au format « 3000-01-01 » pour que cela fonctionne.
Je voudrais, si possible, lancer la recherche sur les années uniquement, mais je ne trouve pas comment faire. Auriez vous une idée ?
Encore merci !
# Le 4 février 2011 à 08:31, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
La date est au format américain (an-mois-jour) .
Dans le fichier recherche_articles.html, des critères comme ci-dessous devrait marcher :
=> on cherche la date entre ’depuis’ (par défaut an 1000) et ’jusqua’ (par défaut an 3000) au 1er janvier...
@+
# Le 4 février 2011 à 10:58, par Abel
En réponse à : Recherche avancée sous SPIP
MERCI+++
ça marche nickel, me voilà sauvé !
# Le 5 septembre 2011 à 18:45, par Abel
En réponse à : Recherche avancée sous SPIP
Bonjour et encore merci pour l’aide que vous m’avez apportée... :-)
J’ai un autre petit problème :
Je voulais faire un tri sur les mots-clés, mais également exclure du résultat les articles possédant certains mots-clés.
Le problème est que les articles ne possédants pas de mots-clés sont exclus des résultats.
Voici les boucles que j’utilise dans mon formulaire :
Voici le critère que j’ai ajouté dans recherche.html :
Si j’efface ce critère de ma page, les articles manquants apparaissent dans les résultats.
Où est-ce que j’ai fauté ?
Merci.
# Le 6 septembre 2011 à 08:58, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
La sélection par mot-clé n’est pas évidente.
La façon de faire est d’utiliser le critère doublons : c’est expliqué ici : http://www.spip.net/fr_article4139.html (voir § Notre grand classique : exclure suivant un mot-clé).
Il faut créer une première boucle pour sélectionner ce qu’on veut exclure (avec un critère
doublons) puis on ajoute doublons à la boucle de recherche pour éliminer le résultat de la première recherche...
@+
# Le 6 septembre 2011 à 14:35, par Abel
En réponse à : Recherche avancée sous SPIP
Bien sûr, je n’avais pas fait le lien !
Merci !
Répondre à ce message
# Le 24 juin 2011 à 11:12, par meyodin
En réponse à : Recherche avancée sous SPIP
Bonjour,
J’ai tenté d’utilisé ce plugin sur mon futur site mais je rencontre des difficultés :
La recherche par champs de texte fonctionne parfaitement mais la recherche par liste déroulante ne fonctionne pas du tout.
Y a-t-il quelque chose que j’aurais oublié et qui permettrait de lier le contenu de ma base de donnée aux différents choix de mots-clés ?
Merci de votre réponse.
# Le 24 juin 2011 à 12:21, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Normalement, rien à faire. Vérifiez quand même que votre squelette ne surcharge pas le fichier recherche.html du plugin...
Un lien pour voir l’erreur ?
@+
# Le 24 juin 2011 à 12:58, par meyodin
En réponse à : Recherche avancée sous SPIP
J’ai réinitialisé tous mes squelettes pour y voir plus clair.
Voilà ce qu’il se passe :
* Lorsque je rentre un texte dans le premier champs : La recherche s’exécute et fonctionne
* Lorsque je rentre un texte dans le premier champs et que dans mes mots-clé je sélectionne un mot, cela fonctionne (le filtre est actif)
* Lorsque je rentre un texte dans le premier champs et que je sélectionne une rubrique, cela fonctionne (le filtre est actif)
* Lorsque je laisse le champs de texte vide mais que je sélectionne un mot de ma liste de mot-clé, rien ne s’affiche (pas d’erreur ni d’information indiquant qu’il n’y aurait pas d’article correspondant à ce mot)
* Lorsque je laisse le champs de texte vide mais que je sélectionne une rubrique, la rubrique choisie apparaît en gras dans mon menu de navigation (pas d’erreur ni d’information indiquant qu’il n’y aurait pas d’article correspondant à ce mot)
Est-ce normal ?
Je ne peux pas encore montrer d’exemple car je travaille en local.
# Le 24 juin 2011 à 13:31, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
C’est normal... la recherche de SPIP s’attend à avoir une chaîne sur laquelle chercher...
Cependant depuis la v2, cette chaîne est optionnelle, il suffit pour cela de rajouter un ? derrière le critère recherche de la boucle...
Il suffit donc de modifier autour de la ligne 53 du fichier recherche.html du plugin :
en :
PS : j’ai modifié l’archive pour la v2.xx en ce sens.
@+
# Le 24 juin 2011 à 14:42, par meyodin
En réponse à : Recherche avancée sous SPIP
Waouh !
Merci beaucoup pour cette réponse rapide, cela fonctionne parfaitement ! Et en plus j’ai appris quelque chose de très intéressant !
Merci encore pour ce plugin fort utile !
# Le 24 juin 2011 à 16:16, par meyodin
En réponse à : Recherche avancée sous SPIP
Rebonjour,
Pour réaliser une revue de presse, je souhaiterais proposer une recherche des articles par année.
J’ai pris modèle sur les autres listes pour faire la liste déroulante année, mais cela ne fonctionne pas. Je ne sais pas comment signaler le type de la boucle. Dois-je créer une nouvelle table pour y intégrer les année ?
Est-ce que je m’y prends bien ? Ou est-ce que c’est plus compliqué que ça ?
# Le 24 juin 2011 à 17:01, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Ce n’est pas beaucoup plus compliqué, il faut reprendre la boucle article (celle qu’on a déjà repris en ajoutant un « ? ») afin d’ajouter un intervalle de dates.
Quelque chose du genre :
- où <= (resp. >=) signifie inférieur (resp. supérieur) ou égal
- où la variable an est définie dans votre liste déroulante (c’est le nom de votre liste), un truc comme cela à mettre dans le fichier formulaire/recherche_avancee.html :
Par défaut, si la variable n’est pas renseignée, on cherche entre le 1er janvier 1000 et le 31 décembre 3000. Sinon entre le 1/01 de l’année et le 31/12 de l’année ;-).
Ce post peut vous aider : #440493
Bon courage...
# Le 26 juin 2011 à 00:42, par meyodin
En réponse à : Recherche avancée sous SPIP
Merci pour cette réponse rapide. (J’avais déjà lu le post dont vous parlez ;)
J’avais déjà trouvé cette solution là mais je cherche plutôt quelque chose qui récupèrerait l’année des articles existant dans ma rubrique de manière automatique, afin de ne pas devoir revenir dans le code chaque année pour rajouter ce champs manuellement.
Je tourne, je tourne mais je n’ai toujours pas trouvé, et en faite, je me demande si c’est possible à faire...
Répondre à ce message
# Le 23 mai 2011 à 08:58, par marviro
En réponse à : Recherche avancée sous SPIP
Bonjour, et merci beaucoup pour ce plug-in.
J’aurais besoin d’ajouter une recherche libre par auteur, croisé avec celle de texte.
Évidemment on peut la faire en donnant la liste complète des auteurs et ajoutant un id_auteur ?.
Mais si je veut que l’usager puisse remplir lui-même le champ auteur et le champ « qui contient le texte », il me faudrait une autre variable recherche... avez-vous une idée ?
L’idée pour moi c’est d’avoir un moteur de recherche comme celui des bibliothèques, avec plusieurs champs qui peuvent être remplis directement par l’usager (c’est parce que j’ai une très grosse base des données et que si je donne la liste c’est trop long...)
Merci encore
# Le 24 mai 2011 à 19:15, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Pour cela, il va falloir que vous vous mettiez au développement SPIP : commencer par faire une recherche sur les auteurs pour avoir une tableau d’auteur puis faire une recherche en donnant le tableau (avec une condition
{id_auteur IN aut_array}) pour limiter la recherche à cette liste...@+
# Le 24 mai 2011 à 19:27, par marviro
En réponse à : Recherche avancée sous SPIP
c’est bien ce que je pensais... je vais m’y mettre...
merci !
# Le 20 juin 2011 à 12:09, par marviro
En réponse à : Recherche avancée sous SPIP
Rebonjour...
est-il possible de sélectionner plusieurs mots-clés ? (ex : je cherche un article connexe au mots-clés « philosophie » et « europe ».
Merci beaucoup !
# Le 24 juin 2011 à 12:19, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Même réponse que précédemment... il faut rajouter des menus pour les mots clé et faire une recherche avec une condition :
{id_auteur IN mot_array}sachant que la condition IN équivaut à un ou ("philosophie" ou « europe »)...@+
Répondre à ce message
# Le 23 mai 2011 à 11:17, par ?
En réponse à : Recherche avancée sous SPIP
Bonjour,
Je vous remercie pour ce formulaire de recherche qui me semble trop utile.
En faite je débute en Spip, j’ai bien téléchargé le Zip pour recherche avancée 2.XX, je l’es dézipper et puis le mettre sous plugins/auto comme les autres plugin mais mon problème se résume tout simplement en ceci : Je ne comprend pas vraiment comment utiliser votre plugin.
Je vous remercie d’avance
Cordialement
# Le 24 mai 2011 à 19:18, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
Normalement, le plugin remplace automatiquement le formulaire de recherche standard de SPIP, sauf si votre squelette surcharge déjà ce formulaire auquel cas, c’est votre squelette qui gagne... ou si vous utilisez un plugin qui surcharge ces fichiers (
recherche.htmletformulaires/recherche.html).@+
Répondre à ce message
# Le 14 février 2011 à 18:09, par joz
En réponse à : Recherche avancée sous SPIP
Bonjour,
l’emploi du filtre google_like semble être déconseillé, voir sous le lien que tu donnes dans cette contrib : « Attention ! Cette contrib a fait l’objet d’une alerte de sécurité ...Merci de ne pas l’utiliser. » et sous le lien google like II on arrive sur un Erreur 404
Mieux vaut ne pas utiliser ce filtre.
à+
joz
# Le 15 février 2011 à 08:38, par Viglino Jean-Marc
En réponse à : Recherche avancée sous SPIP
Bonjour,
J’ai modifié le filtre d’origine. A priori, le filtre commence par faire une conversion en texte brut, ce qui devrait éviter ce genre de problème (?)...
@+
# Le 15 février 2011 à 12:21, par joz
En réponse à : Recherche avancée sous SPIP
merci pour l’info, c’est rassurant :)
tu ne veux pas l’ajouter dans la contrib pour en informer tout utilisateur ?
en tout cas un grand merci aussi pour cette contrib, la recherche avancée fonctionne trop bien !
++
joz
Répondre à ce message