Overview
Comment:Donner la possibilité à un plugin de bypasser la base de données et fournir son propre itérateur
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | dev
Files: files | file ages | folders
SHA1: f6bdca768ea532745436803fb09373878b98ec3d
User & Date: bohwaz on 2017-08-01 06:43:07
Other Links: branch diff | manifest | tags
Context
2017-08-02
04:07
Squelettes: Ajout filtre "date" pour les dates en anglais check-in: 42f3dfa075 user: bohwaz tags: dev
2017-08-01
06:43
Donner la possibilité à un plugin de bypasser la base de données et fournir son propre itérateur check-in: f6bdca768e user: bohwaz tags: dev
06:42
Corrections sur les filtres de dates check-in: 9fe78ccab2 user: bohwaz tags: dev
Changes

Modified src/include/lib/Garradin/Squelette.php from [eb9881daec] to [05afb449ce].

   346    346       }
   347    347   
   348    348       protected function processLoop($loopName, $loopType, $loopCriterias, $loopContent, $preContent, $postContent, $altContent)
   349    349       {
   350    350           $query = $loop_start = '';
   351    351           $query_args = [];
   352    352           $db = DB::getInstance();
          353  +
          354  +        $statement_code = '';
   353    355   
   354    356           // Types de boucles natifs
   355    357           if ($loopType == 'articles' || $loopType == 'rubriques' || $loopType == 'pages')
   356    358           {
   357    359               $where = $order = '';
   358    360               $limit = $begin = 0;
   359    361   
................................................................................
   624    626                   'altContent'    =>  $altContent,
   625    627               ];
   626    628   
   627    629               $callback_return = [
   628    630                   'query'         =>  &$query,
   629    631                   'query_args'    =>  &$query_args,
   630    632                   'loop_start'    =>  &$loop_start,
          633  +                'code'          =>  &$statement_code,
   631    634               ];
   632    635   
   633    636               // Appel du plugin lié à cette boucle, si ça existe
   634    637               $return = Plugin::fireSignal('boucle.' . $loopType, $params, $callback_return);
   635    638   
   636    639               // Si le retour est du texte on le traite comme tel
   637    640               if (is_string($return))
................................................................................
   681    684               if (substr($k, 0, 4) == ':php')
   682    685               {
   683    686                   $query = str_replace($k, $arg, $query);
   684    687                   unset($query_args[$k]);
   685    688               }
   686    689           }
   687    690   
   688         -        $out->append(1, '$statement = $db->prepare('.$query.'); ');
          691  +        // Si le plugin a donné du code à exécuter à la place d'une requête SQL
          692  +        if ($statement_code)
          693  +        {
          694  +            $out->append(1, str_replace('$OBJ_VAR', '$result_' . $hash, $statement_code));
          695  +            $out->append(1, '$nb_rows = $result_'.$hash.'->countRows();');
          696  +        }
          697  +        else
          698  +        {
          699  +            $out->append(1, '$statement = $db->prepare('.$query.'); ');
   689    700   
   690         -        foreach ($query_args as $k=>$arg)
   691         -        {
   692         -            $out->append(1, '$value = ' . (is_array($arg) ? $arg[0] : var_export($arg, true)) . ';');
   693         -            $out->append(1, '$statement->bindValue(' . ($k+1) . ', $value, $db->getArgType($value));');
          701  +            foreach ($query_args as $k=>$arg)
          702  +            {
          703  +                $out->append(1, '$value = ' . (is_array($arg) ? $arg[0] : var_export($arg, true)) . ';');
          704  +                $out->append(1, '$statement->bindValue(' . ($k+1) . ', $value, $db->getArgType($value));');
          705  +            }
          706  +
          707  +            $out->append(1, '$result_'.$hash.' = $statement->execute(); ');
          708  +            $out->append(1, '$nb_rows = $db->countRows($result_'.$hash.'); ');
   694    709           }
   695    710   
   696         -        $out->append(1, '$result_'.$hash.' = $statement->execute(); ');
   697         -        $out->append(1, '$nb_rows = $db->countRows($result_'.$hash.'); ');
   698         -
   699    711           if (!empty($search))
   700    712           {
   701    713               $out->append(1, '} else { $result_'.$hash.' = false; $nb_rows = 0; }');
   702    714           }
   703    715   
   704    716           $out->append(1, '$this->_vars[\''.$hash.'\'] = [\'_self_hash\' => \''.$hash.'\', \'_parent_hash\' => $parent_hash, \'total_boucle\' => $nb_rows, \'compteur_boucle\' => 0];');
   705    717           $out->append(1, '$this->current =& $this->_vars[\''.$hash.'\']; ');
   706    718           $out->append(1, 'if ($nb_rows > 0):');
   707    719   
          720  +        // Ajout contenu avant tag
   708    721           if ($preContent)
   709    722           {
   710    723               $out->append(2, $this->parse($preContent, $loopName, self::PRE_CONTENT));
   711    724           }
   712    725   
   713    726           $out->append(1, 'while ($row = $result_'.$hash.'->fetchArray(SQLITE3_ASSOC)): ');
   714    727           $out->append(1, '$this->_vars[\''.$hash.'\'][\'compteur_boucle\'] += 1; ');
................................................................................
   732    745           }
   733    746   
   734    747           $out->append(1, 'endif; ');
   735    748           $out->append(1, '$parent_hash = $this->_vars[\''.$hash.'\'][\'_parent_hash\']; ');
   736    749           $out->append(1, 'unset($result_'.$hash.', $nb_rows, $this->_vars[\''.$hash.'\']); ');
   737    750           $out->append(1, 'if ($parent_hash) { $this->current =& $this->_vars[$parent_hash]; $parent_hash = $this->current[\'_parent_hash\']; } ');
   738    751           $out->append(1, 'else { $this->current = null; }');
   739         -        $out->append(1, '$this->parent =& $parent_hash ? $this->_vars[$_parent_hash] : null;');
          752  +        $out->append(1, '$this->parent =& $parent_hash ? $this->_vars[$parent_hash] : null;');
   740    753   
   741    754           return $out;
   742    755       }
   743    756   
   744    757       public function fetch($template, $no_display = false)
   745    758       {
   746    759           $this->currentTemplate = $template;