Suite à de nombreuses questions sur le sujet, quelques pistes pour créer un mini-moteur de recherche sur votre site... Il y a deux possibilités : soit votre site est construit autour d'une base de données et là, c'est assez facile... soit il ne l'est pas et il va falloir alors analyser la source de chacune des pages pour répondre à la recherche ! Dans les deux cas, le visiteur tapera sa requête dans un petit formulaire. Exemple
Il peut être sur n'importe quelle page, voire sur toutes et renvoyer à la page "Recherche"... il peut aussi afficher la dernière requête (mémorisée dans un cookie) :
<? if(isset($search)) { $duree = 365*24*60*60; // 1 an en secondes ! setcookie("cooksrch",$search,time()+$duree); Header("Location: recherche.php"); } ?>
La chaîne de recherche
Les visiteurs tapent en général soit un mot, soit plusieurs séparés par un espace ou par un +... on va donc la nettoyer un peu...:o)
dans recherche.asp
<% cooksrch=request.cookies("search") if cooksrch<>"" then ' on transforme les + en espaces search2 = replace(cooksrch,"+"," ") ' on vire les espaces de début et de fin search2 = trim(search2) ' on vire les double-espaces while instr(search2," ") > 0 search2 = replace(search2," "," ") wend end if%>
dans recherche.php
<? // on lit donc le cookie... if(isset($cooksrch)) { // on transforme les + en espaces $search2 = str_replace("+"," ",$cooksrch); // on vire les espaces de début et de fin $search2 = trim($search2); // on vire les double-espaces while(strpos($search2," ")) { $search2 = str_replace(" "," ",$search2); } } ?>
Supprimer les balises
Dans vos news (et évidemment dans le cas 2) les balises HTML éventuelles doivent être retirés du texte pour afficher le résumé... alors petite fonction de nettoyage :
dans recherche.asp
<% Function notag(txt) dim regEx,temp Set regEx = New RegExp regEx.Global = True regEx.Pattern = "<[^>]+>" temp = regEx.REPLACE(txt,"") ' supprime aussi les retours temp = replace(temp,VbCrLf," ") ' et les espaces doubles while instr(temp," ") > 0 temp = replace(temp," "," ") wend notag = temp end function %>
dans recherche.php
<? Function notag($txt) { $pattern = "<[^>]+>"; $temp=ereg_replace($pattern,"",$txt); // Supprime aussi les retours $temp=str_replace("\n"," ",$temp); // et les espaces doubles while(STRPOS($temp," ")) { $temp = STR_REPLACE(" "," ",$temp); } return($temp); } ?>