[spip-dev] mots-recherche en rouge

Coucou,

après quelques jours de tests, le fait que le moteur de recherche puisse
faire passer en rouge les mots trouvés dans le document destination est
quelque chose de très satisfaisant : voir
    http://MondeDiplo.com/search?s=footb
puis cliquer par exemple sur le premier résultat.

Ca ne peut fonctionner qu'en php4, et demande de truquer l'URL (via
var_s=...) OU de jouer avec le referrer http.

Questions :

1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera que
   si php dispose d'ob_start (php >= 4.0.0)

2) au lieu du rouge (<font color...>), je peux mettre une feuille de style :
   <div class='spip_index'> ; pas de préférence ?

3) on passe par l'URL var_s=xxx (simple et compréhensible) ou par l'analyse
    du referrer (plus chic) ?

4) suggestions...?

-- Fil

Hello,

après quelques jours de tests, le fait que le moteur de recherche
puisse faire passer en rouge les mots trouvés dans le document
destination est quelque chose de très satisfaisant

Géniaaaaaal !!! :slight_smile:

Ca ne peut fonctionner qu'en php4, et demande de truquer l'URL (via
var_s=...) OU de jouer avec le referrer http.
Questions :
1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera
que si php dispose d'ob_start (php >= 4.0.0)

Oui !

2) au lieu du rouge (<font color...>), je peux mettre une feuille de
style : <div class='spip_index'> ; pas de préférence ?

Feuille de style, comme ça on peut mettre aussi une couleur de fond,
genre stabilo(c) ... :wink:

3) on passe par l'URL var_s=xxx (simple et compréhensible) ou par
l'analyse du referrer (plus chic) ?

Plus chic mais moins généralisable, donc plutôt vas_s, non ?

4) suggestions...?

Un toast pour toi ! :slight_smile:

-Nicolas

Salut,

après quelques jours de tests, le fait que le moteur de recherche puisse
faire passer en rouge les mots trouvés dans le document destination est
quelque chose de très satisfaisant : voir
    Search results - Le Monde diplomatique - English edition
puis cliquer par exemple sur le premier résultat.
1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera que
   si php dispose d'ob_start (php >= 4.0.0)

Si c'est transparent pour un utilisateur php3, ca me semble OK.

2) au lieu du rouge (<font color...>), je peux mettre une feuille de style :
   <div class='spip_index'> ; pas de préférence ?

La feuille de style permet à l'utilisateur de spip de personaliser plus
facilement le résultat: que donnerait cet exemple si l'utilsiateur à
configuré le texte ou le fond par défaut en rouge pour son site ?

3) on passe par l'URL var_s=xxx (simple et compréhensible) ou par l'analyse
    du referrer (plus chic) ?

Le referrer n'est pas plus chic, il est in-aproprié. Beaucoup
d'utilisateurs (comme moi par exemple) utilisent des proxy (comme
junkbuster) pour effacer ou truquer le referer pour préserver la
confidentialité de leur navigation (en particulier lors du saut entre
sites). Le referer que tu reçois de mon navigateur, par exemple, indiquera
toujours la page de garde (ici 'http://MondeDiplo.com/')…

Je ne pense donc pas que ce soit une bonne idée...

4) suggestions...?

Bon travail :slight_smile:

  Yannick

1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera que
  si php dispose d'ob_start (php >= 4.0.0)

Tu l'intègres dans les squelettes par défaut ?

@ Antoine Pitrou <antoine@rezo.net> :

> 1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera que
> si php dispose d'ob_start (php >= 4.0.0)

Tu l'intègres dans les squelettes par défaut ?

Non, ce sera dans inc-public.php3

-- Fil

> Tu l'intègres dans les squelettes par défaut ?
Non, ce sera dans inc-public.php3

oups : dans inc-public.php3 ET dans spip_style.css ET dans recherche.html
(sauf astuce referrer)

Réponse à Yannick sur le referrer = si tu me donnes pas de referrer, t'as
pas de rouge... ça me semble une mauvaise raison de choisir var_s (mais il y
en a peut-être des bonnes).

On peut aussi faire les deux (ie analyser le réferrer et le décrypter s'il
est google, je l'ai fait de manière expérimentale, ça marche et c'est
marrant).

-- Fil

On peut aussi faire les deux (ie analyser le réferrer et le
décrypter s'il est google, je l'ai fait de manière expérimentale, ça
marche et c'est marrant).

Tu vas révolutionner le web, arrête un peu !!! :stuck_out_tongue:

-Nicolas

Réponse à Yannick sur le referrer = si tu me donnes pas de referrer, t'as
pas de rouge...

Si ca ne perturbe pas la fonction de recherchje elle meme, c'est pas trop
grave, en effet :slight_smile:

On peut aussi faire les deux (ie analyser le réferrer et le décrypter s'il
est google, je l'ai fait de manière expérimentale, ça marche et c'est
marrant).

Oui :slight_smile:
Mais tu vois que ce n'est pas très confidentiel !

  Yannick

4) suggestions...?

Il reste dans mon code un truc chagrin : si on fait sa recherche sur
'laicite', spla boucle {recherche} va trouver les articles contenant
"laïcité", mais le mot ne sera pas mis en valeur dans la page destinataire.

Je n'ai pas trouver comment faire (attention : il y a un risque d'avoir des
problèmes de performance - qui implique de faire TRÈS attention à ce que
fait notre fonction de traitement en fin de parcours ; par ailleurs, si vous
avez testé avec l'exemple var_s=footb, vous voyez que tout le mot "football"
passe en rouge, ce qui est visuellement plus chouette).

Ci-dessous le code si vous avez des idées (je ferai les commits ce soir ou
demain). La fonction mots_cherche est appliquée à TOUTE LA PAGE (uniquement
si $var_s est positionnée, bien entendu).

    // a utiliser avec ob_start() et ob_get_contents() pour
    // mettre en rouge les mots passes dans $var_s
    function mots_cherche($texte) {
        global $var_s;
        $trans = get_html_translation_table(HTML_ENTITIES);
        $mots = split(" +",$var_s);
        while (list(,$mot) = each ($mots)) {
            if (strlen($mot)>3) {
                if ($trans) {
                    $motx = strtr($mot, $trans);
                    if ($motx != $mot) {
                        $trans = array_flip($trans);
                        $texte = strtr($texte,$trans);
                        $trans = false;
                    }
                }
                $moche = $mot;
            }
        }

        if ($moche) {
            while (list(,$mot) = each($moche)) {
                $regexp = "/(>([^<]*[^[:alnum:]])?)(($mot)"."[[:alnum:]]*?)/Uis";
                $texte = preg_replace($regexp,"$1<font color='red'>$3</font>", $texte, 4);
            }
        }

        return $texte;
    }

-- Fil

Salut,

Wonderful!

1) voulez-vous que je l'intègre à spip ? (Evidemment ça ne marchera que
   si php dispose d'ob_start (php >= 4.0.0)

Ben oui !

2) au lieu du rouge (<font color...>), je peux mettre une feuille de style :
   <div class='spip_index'> ; pas de préférence ?

Plutôt <SPAN class='spip_index'> ou, encore mieux peut-être, <B CLASS='spip_index'> qui met le mot en gras même pour les navigateurs qui ont du mal avec les feuilles de style (on peut toujours mettre « pas gras » dans la feuille de style pour les autres).

3) on passe par l'URL var_s=xxx (simple et compréhensible) ou par l'analyse
    du referrer (plus chic) ?

var_s pour moi mais c'est perso. :slight_smile:

4) suggestions...?

Juqu'où iras-tu trop loin ?

Gilles, qui s'est permis de tutoyer Fil...

@ Gilles Pérez-Lambert <Gilles.Perez@univ-montp3.fr> :

Plutôt <SPAN class='spip_index'> ou, encore mieux peut-être, <B
CLASS='spip_index'> qui met le mot en gras même pour les navigateurs qui

<span> ou <div> ? (je ne veux pas mettre de gras, des fois que ça emboîte
des trucs qu'il faudrait pas... c'est idiot peut-être)

-- Fil

Autre difficulté : dans le squelette recherche-dist.html, comment intégrer
var_s=xxxx à la suite de #URL_ARTICLE... si on ne sait pas la forme que
prend #URL_ARTICLE (ie : si article12.html, il faut passer ?var_s=toto ; si
article.php3?id_article=12, il faut passer &var_s=toto ... d'où l'avantage
éclatant de l'analyse du referrer !)

-- Fil

Fil wrote:

Autre difficulté : dans le squelette recherche-dist.html, comment intégrer
var_s=xxxx à la suite de #URL_ARTICLE... si on ne sait pas la forme que
prend #URL_ARTICLE (ie : si article12.html, il faut passer ?var_s=toto ; si
article.php3?id_article=12, il faut passer &var_s=toto ... d'où l'avantage
éclatant de l'analyse du referrer !)

Je suis plutôt d'accord avec Yannick pour le referer. D'ailleurs la recherche
devrait être appelée en POST, pas en GET (à cause des jeux de caractères
non occidentaux par exemple).

Une solution est de faire le transfert de recherche à var_recherche (plus
explicite que var_s, non ?) dans generer_url_article(), etc.

Autre difficulté : dans le squelette recherche-dist.html, comment
intégrer var_s=xxxx à la suite de #URL_ARTICLE... si on ne sait pas
la forme que prend #URL_ARTICLE (ie : si article12.html, il faut
passer ?var_s=toto ; si article.php3?id_article=12, il faut passer
&var_s=toto ... d'où l'avantage éclatant de l'analyse du referrer !)

Il suffirait que #URL_ARTICLE soit déjà muni de '?' ou '&', il ne doit
pas être gênant d'avoir ça même sans valeur ensuite ... Non ?

-Nicolas

Il suffirait que #URL_ARTICLE soit déjà muni de '?' ou '&', il ne doit
pas être gênant d'avoir ça même sans valeur ensuite ... Non ?

Non, il y a trop de risques d'effet de bord. Ou alors il faut
qu'#URL_ARTICLE ait directement ?var_s=xxxx .... mmmhhhh, c'est un peu chaud
peut-être...

-- Fil

Je suis plutôt d'accord avec Yannick pour le referer. D'ailleurs la
recherche devrait être appelée en POST, pas en GET (à cause des jeux de
caractères non occidentaux par exemple).

moui... c'est pas mal de pouvoir faire 'back' sur une page de résultats de
recherche quand même.

Une solution est de faire le transfert de recherche à var_recherche (plus
explicite que var_s, non ?) dans generer_url_article(), etc.

Je commite d'abord une truc qui marche, et je te laisse corriger :wink:

-- Fil

Fil wrote:

moui... c'est pas mal de pouvoir faire 'back' sur une page de résultats de
recherche quand même.

Mea culpa, c'est vrai. Bon, tant pis.

faire passer en rouge les mots trouvés dans le document destination est

Voilà, c'est dans la version cvs (avec un petit bug dans le squelette
recherche.html - ça ne fonctionne que dans la boucle articles, et seulement
pour les inc-urls-standard - pour l'adapter aux inc-urls-html il n'y a pas
grand chose à faire...)

tiens, ça me donne une idée : il suffirait que la fonction qui crée
&var_s=url_encode($recherche)... soit définie dans inc-url, ce qui est somme
toute logique ???

Amusez-vous bien !

-- Fil