Changeset 82818 in spip-zone


Ignore:
Timestamp:
Jun 2, 2014, 10:00:25 AM (5 years ago)
Author:
rastapopoulos@…
Message:

Un tableau des options dans la classe de requête + le critère de la boucle associé.

{option nom, valeur}

{option field_weights, "(title=10, content=5)"}

Location:
_plugins_/indexer/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/indexer/trunk/iterateur/sphinx.php

    r82816 r82818  
    113113                        'group'             => array(),
    114114                        'snippet'           => array(),
     115                        'options'           => array(),
    115116                        'facet'             => array(),
    116117                        'filter'            => array(),
     
    142143                $this->setSnippet($this->command);
    143144
    144 
    145145                $this->setPagination($this->command['pagination']);
     146                $this->setOptions($this->command['options']);
    146147
    147148                $this->runQuery();
     
    438439                }
    439440        }
     441       
     442        /**
     443         * Définir les éventuelles options (poids des champs etc)
     444         *
     445         * @param array $options
     446         * @return bool True s'il y a au moins une option
     447         */
     448        public function setOptions($options){
     449                if (is_array($options) and $options){
     450                        foreach ($options as $nom=>$option){
     451                                // Si la clé est bien un nom d'option, càd pas un nombre
     452                                if (!is_numeric($nom) and is_string($option)){
     453                                        $this->queryApi->option($nom . '=' . $option);
     454                                }
     455                        }
     456                        return true;
     457                }
     458        }
    440459
    441460        /**
     
    796815}
    797816
    798 
     817/**
     818 * Ajouter une option à la requête
     819 *
     820 * @param string $idb
     821 * @param object $boucles
     822 * @param object $crit
     823 */
     824function critere_SPHINX_option_dist($idb, &$boucles, $crit) {
     825        $boucle = &$boucles[$idb];
     826        // critere multiple
     827        $boucle->hash .= "\n\tif (!isset(\$options_init)) { \$command['options'] = array(); \$options_init = true; }\n";
     828       
     829        // Il faut deux paramètres : le nom et l'option
     830        if (isset($crit->param[0]) and isset($crit->param[1])) {
     831                $nom = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
     832                $option = calculer_liste($crit->param[1], array(), $boucles, $boucles[$idb]->id_parent);
     833               
     834                $boucle->hash .= "\t\$command['options'][$nom] = $option;\n";
     835        }
     836}
    799837
    800838/**
  • _plugins_/indexer/trunk/lib/Sphinx/SphinxQL/Query.php

    r82747 r82818  
    1414        private $orderby = array();
    1515        private $limit   = '';
     16        private $option  = array();
    1617        private $facet   = array();
    1718
     
    5758                return $this;
    5859        }
     60       
     61        public function option($option) {
     62                $this->option[] = $option;
     63                return $this;
     64        }
    5965
    6066        public function facet($facet) {
     
    8692                if ($this->orderby)  $query[] = 'ORDER BY ' . implode(', ', $this->orderby);
    8793                if ($this->limit)    $query[] = 'LIMIT '    . $this->limit;
     94                if ($this->option)   $query[] = 'OPTION '   . implode(', ', array_unique($this->option));
    8895                if ($this->facet)    $query[] = 'FACET '    . implode(' FACET ', $this->facet);
    8996                return implode(' ', $query);
Note: See TracChangeset for help on using the changeset viewer.