Google Like

Cette petite fonctionnalité vous permettra d’afficher les résultats de vos recherches à la manière de Google.
Attention ! Cette contrib a fait l’objet d’une alerte de sécurité du CERT le 31 mai 2008 :

« L’analyse du code source a montré
la présence de faillesde type injection de code via une faille
de type XSS (Cross Site Scripting) au niveau de l’outil de recherche utilisé
sur le site web qui permettait d’injecter des liens vers des adresses
contenant des scripts malicieux vers le domaine “imagesoap.com”.
Le problème proviendrait de la fonctionnalité
“Google Like” qui ne purgerait pas correctement ses entrées.


Merci de ne pas l’utiliser.

Présentation

Cette petite fonctionnalité vous permettra d’afficher les résultats de vos recherches à la manière de Google.

Elle fait appel en partie à PHP pour concaténer tout les éléments de recherche de SPIP.

Il faudra egalement vous assurer que votre PHP est compilé avec la librairie PCRE.
Il l’est par défaut depuis la version 4.2.0.

A l’exception de cela, l’inclusion du script se fait de manière traditionnelle, c’est-à-dire dans “mes_fonctions.php3”.

Recherche de “futur” sur toolinux.com
Recherche de “futur” sur toolinux.com

Le systême a l’avantage d’être insensible à la casse au niveau de la requête mais respecte néanmoins celle-ci lors de l’affichage contextuel.

Mise en place

Dans mes_fonctions.php3 accessible à la racine de votre site (ou à créer si ce n’est pas le cas), ajoutez la fonction suivante :

function google_like($string){
	$query = rtrim(str_replace("+", " ", $_GET['recherche']));  
	$qt = explode(" ", $query);
	$num = count ($qt);
	$cc = ceil(200 / $num);
		for ($i = 0; $i < $num; $i++) {
			$tab[$i] = preg_split("/($qt[$i])/i",$string,2, PREG_SPLIT_DELIM_CAPTURE);
			if(count($tab[$i])>1){
				$avant[$i] = substr($tab[$i][0],-$cc,$cc);
	    	    	        $apres[$i] = substr($tab[$i][2],0,$cc);
		    	        $string_re .= "<i>[...]</i> $avant[$i]<b>".$tab[$i][1]."</b>$apres[$i] <i>[...]</i> ";
	       }
	 }
	 return $string_re;
}

Sur votre squelette recherche.html, dans votre boucle (ARTICLES), ajoutez le code suivant :

<?php 
$string = '[(#TITRE|supprimer_numero|texte_script) ]';
$string .= '[(#CHAPO|textebrut|texte_script) ]';
$string .= '[(#DESCRIPTIF|textebrut|texte_script) ]';
$string .= '[(#TEXTE|textebrut|texte_script)]';
echo google_like($string);
?>

Exemples en ligne

Ce filtre a été développé par Linagora à la demande de la mairie d’Aubervilliers dont voici un exemple d’utilisation en ligne : http://www.aubervilliers.fr/recherc...

Nous l’avons repris lors de la conception du site de toolinux.com : http://www.toolinux.com/recherche.p...

D’autres contributions à SPIP sont disponibles sur notre espace communautaire: http://www.linagora.org/rubrique32.html

updated on 5 August 2009

Discussion

16 discussions

  • boujour

    cette contrib marche a merveille a part une petite chose:

    je veux effectuer un recherche sur un mot présent plusieur fois sur un article

    lorque j’effectus une recherche sur ce mot, il ne m’affiche que la parti de l’article ou mon mot est present en premier mais il ne m’affiche pas les autres dans mon resultat

    j’espère que j’ai étais clair

    merci d’avance

    Reply to this message

  • Bonjour
    J’ai développé mon site avec spip1.8.2g et utilisé “google_like” en local : tout fonctionne...Une fois transposé chez ovh, notre hébergeur : “google_like” ne marche pas : je n’obtiens qu’une page blanche...Est-ce que quelqu’un saurait pourquoi ?
    Merci

    Reply to this message

  • Si je cherche sur ’Jean’ p.ex. la recherche Google-like affiche aussi les articles écrit par Jean, même si le mot Jean n’apparait pas dans le texte de l’article. J’ai pourtant enlevé la boucle auteurs de la squelette. Que faire pour exclure les auteurs de la recherche?

    Reply to this message

  • Bonjour,

    je viens d’installer votre script et ça marche très bien sauf que j’ai deux trucs étrange. Le premier sous IE losqu’il affiche le résultat de la recherche, il surligne les mot recherché dans toute cette page.

    Autre trucs étrange si on va sur une des pages trouvées dans la recherche, il surligne bien le mot trouvé, sauf que dans le texte, il surligne uniquement le premier mais pas les autres.

    Voila merci d’avance pour votre aide.

    Cordialement,

    François.

    Reply to this message

  • Serait-il possible de présenter les resultats de recherche ’Google like’ sur plusieurs pages, p. ex. avec 10 résultats par page?

    Un peu comme la contrib ci-dessous fait avec des articles?

    (J’ utilise SPIP 1.8.2)

    Reply to this message

  • 1

    La fonction ne reconnaît pas les lettres accentuées. Par exemple sur le site d’Aubervillers, la recherche sur “ouvrier” interdit les “ouvrières” d’affichage contextuel !

    • Donc la solution c’est... d’enlever les accents !

      • rajouter ceci dans mes_fonctions.php3 et,
      • toujours dans mes_fonctions, remplacer dans google_like :
        $query = rtrim(str_replace("+"," ", $_GET['recherche']));

        par :

        $query = enlever_accents ($_GET['recherche']);
        $query = rtrim(str_replace("+", " ", $query));
      • et dans le squelette, rajouter le filtre enlever_accents :
        <?php 
        $string = '[(#TITRE|enlever_accents|supprimer_numero|texte_script) ]';
        $string .= '[(#CHAPO|enlever_accents|textebrut|texte_script) ]';
        $string .= '[(#DESCRIPTIF|enlever_accents|textebrut|texte_script) ]';
        $string .= '[(#TEXTE|enlever_accents|textebrut|texte_script)]';
        echo google_like($string);
        ?>

        bon, c’est pas très joli mais ça marche...

    Reply to this message

  • 2
    xaccrocheur

    Ca marche NICKEL, Merci !!!
    C’est vraiment *très* pratique, surtout sur des “grosses” recherches !

    Dites, ça m’a permis de découvrir que SPIP n’indéxait pas mes breves, seulement mes articles ! Damned, j’ai cherché une option de configuration de la recherche dans le back-office, et dans le code, mais je n’ai pas trouvé...?

    Quelqu’un ici sait-il où on règle ça ? Peut-être n’est-ce pas possible (je n’ose le croire:) ?

    Merci !

    • Bien sûr que SPIP indexe les brèves, regardes le squelette par defaut recherche-dist.html de SPIP, il y a bien une boucle pour afficher les brèves trouvées.

      Cette page te le confirme aussi :
      http://www.spip.net/fr_article996.html

    • Bonjour, je suis débutant sous spip, je viens de mettre en place google-like, cela fonctionne parfaitement pour les recherches sous les articles, en revanche je n’arrive pas à ecrire la boucle qui doit s’insérer dans mon dist/recherche.html pour faire une recherche sur les brèves.

      Actuellement j’ai posé ceci :

      BOUCLE_breves(BREVES) recherche par points inverse 0,8

      ...

      ...

      ...

      /BOUCLE_breves

      mais cela ne fais que poser un menu ds ma page.... d’avance merci pour votre aide.

    Reply to this message

  • Très beau travail. Mais, est-ce possible d’avoir les résultats en plusieurs pages ? Ça serait très pratique lorsque le résultat donne 50 titres et plus.

    Reply to this message

  • 3

    Excellent article qui m’a grandement facilité la vie, merci !

    • J’ai essayé le scipt google like, mais je n’ai pas dû le faire convenablement. J’ai crée le fichier mes_fonctions php3 qui j’ai installé sur la racine de mon site et j’ai inséré (mais je ne sais pas si c’était bien au bon endroit le scipt dans recherche.html! je suis débutant!). Que dois-je faire? Merci

    • J’ai essayé le script de google like, mais ça ne marche pas pour moi. Je viens juste de réaliser que peut-être cela vient de la version de mon php, on me dit qu’il faudra vérifier qu’il est bien complilé avec PCRE, mais je ne m’y entends pas. Pouvez-vous m’aider?

    • Dis comment tu as fais, parce que moi, j’ai bien crée ce fichier mes_fonctions.php3 avec le script en question auquel j’ai rajouté <?php au début et?> à la fin. J’ai rajouté le deuxième script dans mon recherche.html juste avant la balise qui ferme ma boucle article, c’est à dire avant ceci:
      mais cela ne fonctionne pas!!D’avance merci

    Reply to this message

  • un petit add pour couper proprement au premier blanc dans $avant[$i] et au dernier dans $apres[$i]...

    function google_like($string){
            $query = rtrim(str_replace("+", " ", $_GET['recherche']));  
            $qt = explode(" ", $query);
            $num = count ($qt);
            $cc = ceil(200 / $num);
                    for ($i = 0; $i < $num; $i++) {
                            $tab[$i] = preg_split("/($qt[$i])/i",$string,2, PREG_SPLIT_DELIM_CAPTURE);
                            if(count($tab[$i])>1){
                                    $avant[$i] = substr($tab[$i][0],-$cc,$cc);
                                    $pos = strpos($avant[$i], " ");
                                    $avant[$i]= substr($avant[$i],$pos); 
                                        $apres[$i] = substr($tab[$i][2],0,$cc);
                                    $pos = strrpos($apres[$i], " ");
                                    $apres[$i] = substr($apres[$i],0,$pos); 
                                        $string_re .= "<i>[...]</i> $avant[$i]<b>".$tab[$i][1]."</b>$apres[$i] <i>[...]</i> ";
                   }
             }
             return $string_re;
    }

    @+ Nic;o)

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom