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

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

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

    Répondre à ce 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

    Répondre à ce 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 ?

    Répondre à ce 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.

    Répondre à ce 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)

    Répondre à ce 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...

    Répondre à ce 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.

    Répondre à ce 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.

    Répondre à ce 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

    Répondre à ce 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)

    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