Changes to "Plugins" between 2017-08-01 05:51:09 and 2017-08-01 05:59:47

220
221
222
223
224
225
226
227
228
229
230

231
232
233
234
235
236
237
238
239
240
220
221
222
223
224
225
226




227

228
229
230
231
232
233
234
235
236







-
-
-
-
+
-









Il est possible aussi de remplir dans ce contexte la variable $loop_start avec du code PHP, qui sera exécuté à chaque itération de la boucle avant l'affichage. Par exemple on peut l'utiliser pour remplir une balise :

    $loopStart = '$row[\'iteration\'] = $i++;';

Une autre solution pour faire une boucle qui n'utilise pas la base de données SQLite c'est de créer son propre code de boucle. Pour cela il faut utiliser le paramètre de retour `statement_code`. Un exemple pris dans le plugin Ouvertures :

    $code = new Squelette_Snippet;
    $code->append(1, 'if (!isset($ouvertures)):');
    $code->append(1, '  $ouvertures = new Plugin(\'ouvertures\');');
    $code->append(1, '  require_once $ouvertures->path() . DIRECTORY_SEPARATOR . \'lib/Ouvertures.php\';');
    $code->append(1, 'endif;');
    $code->append(1, '$OBJ_VAR = new Plugin\Ouvertures\Ouverture;');
    $code->append(1, sprintf('$OBJ_VAR = new Plugin\Ouvertures\Ouvertures(%s);', var_export($action, true)));
    $code->append(1, '$nb_rows = $OBJ_VAR->countRows();');

    $return['statement_code'] = $out->output(true);

    return true;

Dans ce cas `$OBJ_VAR` sera remplacé dans le code final par le nom d'une variable unique différente pour chaque boucle (ceci afin de pouvoir avoir des boucles récursives et imbriquées), et l'objet `Plugin\Ouvertures\Ouvertures` fournira deux méthodes: `countRows()` (renvoie le nombre de résultats) et `fetchArray($mode)` devra renvoyer une ligne de résultat à chaque fois pour la boucle, s'il y a au moins un résultat.

Enfin, une autre méthode est de renvoyer un `string` contenant du code PHP dans le callback. Le code sera enregistré dans le fichier de cache compilé et exécuté. Consulter le code de \Garradin\Squelette pour en savoir plus.