Changeset 70255 in spip-zone


Ignore:
Timestamp:
Feb 27, 2013, 6:24:54 PM (6 years ago)
Author:
fil@…
Message:

on fait encore plus de trucs avec sphinx

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/sphinx/trunk/inc/sphinx.php

    r69849 r70255  
    1616                $a = array();
    1717                foreach(inc_sphinx_to_array_dist($u, $selection='ecrire') as $r) {
    18                         if ($id_article = $r['attrs']['id_objet']
    19                         AND $r['attrs']['source'] == 1)
     18                        if ($id_article = $r['attrs']['id_objet'])
    2019                                $a[$id_article] = $r['weight'];
    2120                }
     
    4948        // appel par une page mot :
    5049        //   (ou limiter aux mots-clŽs)
    51         // ou par l'url &mots=italie
     50        // ou par l'url &mots=italie ; &mots[]=italie&mots[]=economie
    5251        // sprintf('%u') necessaire car le crc32 en 32 bits n'est pas le mme qu'en 64
    53         if (strlen($env['mots'])) {
    54                 $cmot = sprintf('%u',crc32(trim(mb_strtolower($env['mots'], 'UTF-8'))));
    55         }
    56 
    57         # TODO
    58         # $mots peut tre un array &mots[]=DŽfense, ou un string &mots=DŽfense
    59         # &debut=1962-05&fin=2005-09 : plage temporelle
    60         # &id_auteur=13226 => auteur (highlander)
    61        
     52        if (is_string($env['mots'])) {
     53                $env['mots'] = array($env['mots']);
     54        }
     55        if (is_array($env['mots'])) {
     56                foreach ($env['mots'] as $mot) {
     57                        if (strlen($mot))
     58                        $cmot[] = sprintf('%u',crc32(trim(mb_strtolower($mot, 'UTF-8'))));
     59                }
     60        }
     61
     62        # demande d'un id_auteur
     63        if (isset($env['id_auteur'])) {
     64                $id_auteur = intval($env['id_auteur']);
     65        }
    6266
    6367        # validitŽ de la requte ?
    6468        if (!strlen($recherche)
    6569        AND !isset($cmot)
     70        AND !$id_auteur
    6671        )
    6772                return false;
     
    8489
    8590
    86         # mot-clŽ sans fulltext
    87         if (isset($cmot))
    88                 $cl->SetFilter ( "cmot", array($cmot), $exclude=false );
     91        # mots-clŽs sans fulltext
     92        if (isset($cmot)) {
     93
     94                # on veut un ET logique
     95                foreach ($cmot as $m) {
     96                        $cl->SetFilter ( "cmot", array($m), $exclude=false );
     97                }
     98                # ca, ca fait un OU logique
     99                # $cl->SetFilter ( "cmot", $cmot, $exclude=false );
     100
     101        }
     102
     103        # id_auteur
     104        if ($id_auteur)
     105                $cl->SetFilter ( "id_auteurs", array($id_auteur), $exclude=false );
     106
     107        # lang
     108        if ($env['lang']) {
     109                $cl->SetFilter ( "lang", sprintf('%u',CRC32($env['lang'])), $exclude=false );
     110        }
    89111
    90112        # matching mode
     
    104126        # filtrage
    105127        #$cl->SetFilter ( "autotags", $tags );
    106         #$cl->SetFilterRange ( "date", $min, $max, $exclude=false );
     128
     129        # debut et fin sous la forme d'une date 1999-01
     130        if (isset($env['debut'])
     131        OR isset($env['fin'])
     132        ) {
     133                $min = strtotime($env['debut']);
     134                $max = strtotime($env['fin']);
     135                if (!$max) $max = strtotime('2999-01');
     136                $cl->SetFilterRange ( "dateu", $min, $max, $exclude=false );
     137        }
    107138
    108139        # booster le titre et l'auteur
     
    150181        if ($selection == 'ecrire') {
    151182                # espace prive
     183                if (defined('_SPHINX_ECRIRE_SOURCE')) {
     184                        $cl->SetFilter ( "source", array(_SPHINX_ECRIRE_SOURCE) );
     185                }
     186
    152187                $cl->SetLimits(0,500);
    153188        }
     
    155190                // passage par parametre de $cl et $sources
    156191                // pour modification eventuelle par une fonction maison
    157                 $f($cl,$sources,$query);
     192                $f($cl,$sources,$query,$env);
    158193        }
    159194        else if (function_exists($f = 'sphinx_selection_default')) {
    160195                // passage par parametre de $cl et $sources
    161196                // pour modification eventuelle par une fonction maison
    162                 $f($cl,$sources,$query);
     197                $f($cl,$sources,$query,$env);
    163198        }
    164199
Note: See TracChangeset for help on using the changeset viewer.