Changeset 82654 in spip-zone


Ignore:
Timestamp:
May 21, 2014, 9:56:59 AM (5 years ago)
Author:
marcimat@…
Message:

Éviter des notices possibles, et nettoyage du code précédent suite aux modifications de fil. On met la façon de sauvegarder les données en globale dans une méthode spécifique au passage.

File:
1 edited

Legend:

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

    r82649 r82654  
    99**/
    1010
    11 include_spip('iterateur/data');
    1211
    1312/**
     
    7473         */
    7574        protected $result = array();
    76 
    77         /**
    78          * Données de la requête (hors documents récupérés)
    79          *
    80          * ArrayObject pour avoir 1 seul objet non dupliqué
    81          *
    82          * @var ArrayObject
    83          */
    84         protected $data = null;
    85 
    8675
    8776        /**
     
    149138
    150139
     140        /**
     141         * Sauvegarde des données pour utilisation ultérieure
     142         * dans les squelettes via les balises `#SPHINX_xx`
     143         * où xx est la clé sauvegardée.
     144         *
     145         * @param string $cle
     146         * @param mixed $val
     147         * @return void
     148        **/
     149        private function save($cle, $val) {
     150                if (!isset($GLOBALS['SphinxSave'])) {
     151                        $GLOBALS['SphinxSave'] = array();
     152                }
     153                // identifiant de la boucle
     154                $id = $this->command['id'];
     155                if (!isset($GLOBALS['SphinxSave'][$id])) {
     156                        $GLOBALS['SphinxSave'][$id] = array();
     157                }
     158                $GLOBALS['SphinxSave'][$id][$cle] = $val;
     159        }
     160
     161        /**
     162         * Sauvegarde toutes les données pour utilisation ultérieure
     163         *
     164         * @param array $data
     165         * @return void
     166         */
     167        private function saveAll($data) {
     168                foreach ($data as $cle => $val) {
     169                        $this->save($cle, $val);
     170                }
     171        }
     172
     173
     174        /**
     175         * Exécute la requête
     176         *
     177         * Exécute la requête, sauvegarde des données, retravaille
     178         * les résultats pour que la pagination fonctionne.
     179         *
     180         * @param
     181         * @return
     182        **/
    151183        public function runQuery() {
    152184                $query  = $this->queryApi->get();
    153185                $result = $this->sphinxQL->allfetsel($query);
    154186
    155                 $GLOBALS['SphinxSave'][$this->command['id']]['query'] = $query;
     187                $this->save('query', $query);
    156188
    157189                if (!$result) {
     
    168200                        $result['query']['docs'] = array_pad($result['query']['docs'], $result['query']['meta']['total'], null);
    169201                }
    170 
    171                 $this->result = $result['query'];
    172 
    173                 unset($result['query']['docs']);
    174202
    175203                // remettre les alias sur les facettes :
     
    181209                $result['query']['facets'] = $facets;
    182210
    183                 $this->data = new ArrayObject($result['query']);
    184 
    185                 $GLOBALS['SphinxSave'][$this->command['id']] = $result['query'];
     211
     212                $this->result = $result['query'];
     213                unset($result['query']['docs']);
     214                $this->saveAll($result['query']);
    186215
    187216                return true;
     
    500529
    501530
    502 
    503         // pour #SPHINX_*, permet de récupérer tous les champs de metadata
    504         public function getMetaData() {
    505                 return $this->data;
    506         }
    507 
    508 
    509531        /**
    510532         * Revenir au depart
     
    548570                if ($this->valid()) {
    549571                        list($this->cle, $this->valeur) = each($this->result['docs']);
    550                         // on transmet, pour chaque ligne les metas données avec…
    551                         // histoire d'être certain qu'on les verra dans $Pile[$SP]
    552                         // (feinte de sioux)
    553                         if (is_array($this->valeur)) {
    554                                 $this->valeur['_sphinx_data'] = $this->data;
    555                         }
    556572                }
    557573        }
     
    798814 * Récupère pour une balise `#SPHINX_QQC` la valeur de 'qqc'
    799815 * dans les meta données associées à la requête.
    800  *
    801  * On les puise soit directement dans l'iterateur si on l'a (partie centrale de boucle),
    802  * soit dans une globale (conjointement à l'utilisation de `#SPHINX_SAVE_META`
    803816 *
    804817 * @param Champ $p
     
    816829
    817830        $champ = strtolower($champ);
    818         $p->code = '$GLOBALS["SphinxSave"]["'.$b.'"]["'.$champ.'"]';
     831        $p->code = '(isset($GLOBALS["SphinxSave"]["'.$b.'"]["'.$champ.'"]) ? $GLOBALS["SphinxSave"]["'.$b.'"]["'.$champ.'"] : "")';
    819832
    820833        $p->interdire_scripts = false;
Note: See TracChangeset for help on using the changeset viewer.