Carnet Wiki

Accéder à l’environnement

Version 6 — Novembre 2018 JLuc

Comment accéder à une valeur de l’environnement dans un critère ou une balise ?

Si on a besoin de tester un élément de l’env on y accède par la pile. Le contexte courant est accessible à un moment donné via $Pile[0].

Lorsque le compilateur a besoin, pour un critère par exemple, d’accéder à la valeur de la rubrique, il devra échapper ce code puisqu’il devra être exécuté non à la compilation, mais lors de l’exécution de la boucle.

Ex 1 : Accéder à la valeur de id_rubrique :
$env_id = "\$Pile[0]['id_rubrique']";

Tester s’il n’est pas vide si sa valeur est positive :

  $boucle->where[] = array(
	"'?'", 
	"(isset($env_id)?(is_array($env_id)?count($env_id):strlen($env_id)):'')", 
	"''", 
	"'articles.id_rubrique>0'");

Calculer une valeur

On peut utiliser les fonctions interprete_argument_balise (qui reçoit la pile et le n° de l’argument) ou calculer_liste (qui reçoit directement l’argument et les paramètres de la balise courante issus de la pile).

Incertitude : pourquoi tester si complexement in_array et count et strlen ici ?

Accèder à une valeur définie dans les boucles parentes

Si une valeur n’est pas définie dans la boucle courante, on ne pourra pas y accéder directement mais on peut récupérer la valeur dans la boucle parente, avec la fonction calculer_argument_precedent qui reçoit trois paramètres :

  • l’identifiant de la boucle actuelle,
  • le nom du champ à récupérer,
  • le tableau des boucles.

Si une valeur n’est pas définie dans la boucle courante, on ne pourra pas y accéder directement mais on peut récupérer la valeur dans la boucle parente, avec la fonction calculer_argument_precedent.
Ex1 Ex : calculer_argument_precedent($idb, 'nombre_de_pieces', $boucles);
Le cas échéant, on peut passer le résultat par kwote avant de l’utiliser :
kwote(calculer_argument_precedent($idb, 'numero_revue', $boucles));

Ex2 : le critère exclus cité dans Créer un nouveau critère.


CreerUnCritere avec pipeline pre_boucle | Créer un nouveau critère