Changeset 88312 in spip-zone


Ignore:
Timestamp:
Mar 31, 2015, 8:13:42 AM (4 years ago)
Author:
cedric@…
Message:

Un filtre #ENV{recherche}|fulltext_recherche_naturelle_fr

Location:
_plugins_/fulltext/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fulltext/trunk/fulltext_fonctions.php

    r85895 r88312  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
    5 function balise_AIDE_RECHERCHE($p) {
     5function balise_AIDE_RECHERCHE($p){
    66        if (!function_exists('recuperer_fond'))
    77                include_spip('public/assembler');
    88        //    $arg = interprete_argument_balise(1, $p);
    99        $mess_aide = str_replace("'", "\'", recuperer_fond('aide_recherche', array('lang' => $GLOBALS['spip_lang'])));
    10         $p -> code = "'$mess_aide'";
    11         $p -> statut = 'html';
     10        $p->code = "'$mess_aide'";
     11        $p->statut = 'html';
    1212        return $p;
    1313}
    1414
    15 function lien_objet_ptg($id, $type, $longueur = 80, $connect = NULL) {
     15function lien_objet_ptg($id, $type, $longueur = 80, $connect = NULL){
    1616        include_spip('inc/liens');
    1717        $titre = traiter_raccourci_titre($id, $type, $connect);
     
    2222        return "<a href='$url' class='$type'>" . couper($titre, $longueur) . "</a>";
    2323}
    24 ?>
     24
     25
     26/**
     27 * Un filtre pour mettre en forme #ENV{recherche}|fulltext_recherche_naturelle_fr
     28 *
     29 * (ne marche qu'avec la langue fr)
     30 * - on supprime les s et x pluriels
     31 * - on ajoute un * sur les mots pour attraper les pluriels quand un singulier est demande
     32 * - si des ET ou OU sont dans la requete on les transforme en + et (rien)
     33 * - sinon on ajoute des + pour avoir tous les mots (ET par defaut, chaque mot reduit le perimetre)
     34 * - les expressions entre "" sont conservees telles quelles
     35 *
     36 * @param string $recherche
     37 * @param bool $strict
     38 *   si false on n'ajoute pas les + sur chaque terme
     39 * @return string
     40 */
     41function fulltext_recherche_naturelle_fr($recherche, $strict = true){
     42
     43        #var_dump($recherche);
     44
     45        // supprimer caracteres de ponctuation
     46        $recherche = strtr($recherche, "-_;,'+*", "       ");
     47
     48        if (preg_match(",\b(ET|OU)\b,",$recherche)){
     49                $strict = false; // pas la peine de faire + car c'est gere par les ET et OU
     50                $recherche = preg_replace(",\bOU\b,"," ",$recherche);
     51                $recherche = preg_replace(",\bET\s+,","+",$recherche);
     52
     53                $recherche = "+".trim($recherche); // le premier mot est un ET
     54        }
     55
     56        $recherche = preg_replace(",\s+,", " ", $recherche);
     57
     58        // les guillemets sont a conserver et on ne touche pas au contenu de la chaine
     59        if (preg_match(',["][^"]+["],Uims',$recherche,$matches)){
     60                foreach($matches as $match){
     61                        // corriger le like dans le $q
     62                        $word = preg_replace(",\s+,Uims","\x1",$match);
     63                        $recherche = str_replace($match,$word,$recherche);
     64                }
     65        }
     66
     67        $recherche = explode(' ', $recherche);
     68        foreach ($recherche as $k => $r){
     69                if (strlen($r)>=3 AND substr($r,0,1)!=='"' AND substr($r,-1)!='"'){
     70                        $r = rtrim($r, "sxSX");
     71                        $recherche[$k] = ($strict ? "+" : "") . $r . "*";
     72                }
     73        }
     74
     75        $recherche = implode(" ", $recherche);
     76        $recherche = str_replace("\x1"," ", $recherche);
     77
     78        #var_dump($recherche);
     79
     80        return $recherche;
     81}
  • _plugins_/fulltext/trunk/paquet.xml

    r88298 r88312  
    22        prefix="fulltext"
    33        categorie="navigation"
    4         version="1.1.0"
     4        version="1.1.1"
    55        etat="test"
    66        compatibilite="[3.0.1;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.