Ignore:
Timestamp:
May 20, 2014, 10:17:56 AM (5 years ago)
Author:
fil@…
Message:

pour la pagination dans la boucle #DOCS fille, annoncer {pages #DEBUT_DOCUMENTS,20} dans la boucle (SPHINX) principale

File:
1 edited

Legend:

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

    r82609 r82611  
    105105                        'snippet'   => array(),
    106106                        'facet'     => array(),
    107 
    108107                        'select_filter' => array(),
    109108                );
    110109
    111 #var_dump($this->command);
    112110
    113111                $this->info = $info;
     
    128126                $this->setSnippet($this->command);
    129127
     128                $this->setPagination($this->command['pagination']);
     129
    130130                $this->runQuery();
    131131        }
     
    138138                        return false;
    139139                }
     140
     141                // decaler les docs en fonction de la pagination demandee
     142                if (is_array($result['query']['docs'])
     143                AND $pagination = $this->queryApi->limit) {
     144                        list($debut) = array_map('intval',explode(',', $pagination));
     145
     146                        $result['query']['docs'] = array_pad($result['query']['docs'], - count($result['query']['docs']) - $debut, null);
     147                        $result['query']['docs'] = array_pad($result['query']['docs'], $result['query']['meta']['total'], null);
     148                }
     149
    140150                $this->result = $result;
    141151                return true;
     
    230240                }
    231241                return true;
     242        }
     243
     244        /**
     245         * Définir la pagination
     246         *
     247         * @param array $index Liste des index
     248         * @return bool True si une pagination est demandee
     249        **/
     250        public function setPagination($pagination) {
     251                # {pages #DEBUT_DOCUMENTS, 20}
     252                if (is_array($pagination)) {
     253                        $debut = intval($pagination[0]);
     254                        if (isset($pagination[0]))
     255                                $nombre = intval($pagination[1]);
     256                        else
     257                                $nombre = 20;
     258                        $this->queryApi
     259                                ->limit("$debut,$nombre");
     260                        return true;
     261                }
    232262        }
    233263
     
    277307                        return false;
    278308                }
    279                 $this->queryApi->select("SNIPPET($desc[champ], " . $this->quote($desc['phrase']) . ", 'limit=$desc[limit],html_strip_mode=strip') AS $desc[as]");
     309                $this->queryApi->select("SNIPPET($desc[champ], " . $this->quote($desc['phrase']) . ", 'limit=$desc[limit]') AS $desc[as]");
    280310                return true;
    281311        }
     
    632662}
    633663
    634 
    635 
     664function critere_SPHINX_pages_dist($idb, &$boucles, $crit) {
     665        $boucle = &$boucles[$idb];
     666
     667        // critere multiple
     668        $boucle->hash .= "\n\tif (!isset(\$pagination_init)) { \$command['pagination'] = array(); \$pagination_init = true; }\n";
     669
     670        foreach ($crit->param as $param){
     671                $boucle->hash .= "\t\$command['pagination'][] = "
     672                                . calculer_liste($param, array(), $boucles, $boucles[$idb]->id_parent) . ";\n";
     673        }
     674}
     675
Note: See TracChangeset for help on using the changeset viewer.