Changeset 82616 in spip-zone


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

Il me semble qu'on peut stocker directement la limite de pagination dans l'iterateur. À vérifier.

Location:
_plugins_/indexer/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/indexer/trunk/content/sphinx.html

    r82614 r82616  
    3232
    3333
    34 
    3534<BOUCLE_recherche_sphinx(SPHINX)
    3635        {index #ENV{source,spip}}
    3736        {recherche #ENV*{recherche}}
    3837
    39         {pages #DEBUT_DOCUMENTS, 10}
     38        {pages #DEBUT_DOCUMENTS}
    4039
    4140        {select_filter #ENV{annee},  'YEAR(date) = @valeur' }
  • _plugins_/indexer/trunk/doc/boucle_sphinx.md

    r82591 r82616  
    181181    {select_filter #ENV{tag}, 'IN(properties.tag, @valeurs)', 'LENGTH(properties.tags) = 0'}
    182182    {select_filter #ENV{annee}, 'YEAR(date) = @valeur' }
     183   
     184   
     185PAGES
     186-----
     187
     188Permet de décaler le tableau de résultats pour exploiter ensuite la pagination d'une boucle DATA avec la liste des documents.
     189
     190----
     191
     192    {pages #DEBUT_DOCUMENTS}
     193    {pages #DEBUT_DOCUMENTS, 20}
  • _plugins_/indexer/trunk/iterateur/sphinx.php

    r82614 r82616  
    9090
    9191        /**
     92         * Limites demandés de la requête en cas de pagination
     93         * @var array(debut, nombre)
     94         */
     95        protected $pagination_limit = array();
     96
     97        /**
    9298         * Constructeur
    9399         *
     
    139145                // decaler les docs en fonction de la pagination demandee
    140146                if (is_array($result['query']['docs'])
    141                 AND $pagination = $this->queryApi->getLimit()) {
    142                         list($debut) = array_map('intval',explode(',', $pagination));
     147                AND $pagination = $this->getPaginationLimit()) {
     148                        list($debut) = array_map('intval', $pagination);
    143149
    144150                        $result['query']['docs'] = array_pad($result['query']['docs'], - count($result['query']['docs']) - $debut, null);
     
    248254        public function setPagination($pagination) {
    249255                # {pages #DEBUT_DOCUMENTS, 20}
    250                 if (is_array($pagination)) {
     256                if (is_array($pagination) and $pagination) {
     257                        $nombre = 20;
    251258                        $debut = intval($pagination[0]);
    252                         if (isset($pagination[1]))
     259                        if (isset($pagination[1])) {
    253260                                $nombre = intval($pagination[1]);
    254                         else
    255                                 $nombre = 20;
    256                         $this->queryApi
    257                                 ->limit("$debut,$nombre");
     261                        }
     262                        $this->setPaginationLimit($debut, $nombre);
    258263                        return true;
    259264                }
     265        }
     266
     267        /**
     268         * Affecte une limite à la requête Sphinx (et sauve ses bornes)
     269         *
     270         * @param int Début
     271         * @param int Nombre de résultats
     272        **/
     273        public function setPaginationLimit($debut, $nombre) {
     274                $this->pagination_limit = array($debut, $nombre);
     275                $this->queryApi->limit("$debut,$nombre");
     276        }
     277
     278        /**
     279         * Retourne les limites de pagination précédemment sauvées
     280         *
     281         * @param int Début
     282         * @param int Nombre de résultats
     283        **/
     284        public function getPaginationLimit() {
     285                return $this->pagination_limit;
     286                # return explode(',', $this->queryApi->getLimit());
    260287        }
    261288
  • _plugins_/indexer/trunk/lib/Sphinx/SphinxQL/Query.php

    r82614 r82616  
    7676
    7777
    78         public function getLimit() {
    79                 return $this->limit;
    80         }
    81 
    8278        private function removeEmpty() {
    8379                foreach (array('select', 'from', 'where', 'groupby', 'orderby', 'facet') as $key) {
Note: See TracChangeset for help on using the changeset viewer.