Ci-dessus la balise de la boucle imbriquée retourne 2 au lieu de rien (car
null). Si j'utilise la syntaxe alternative [(#VALEUR|table_valeur{exemple})]
en lieu et place de #EXEMPLE, j'obtiens la bonne valeur soit rien
La raison, je pense, est que SPIP fournit les valeurs d’une boucle supérieure à une boucle imbriquée quand ces valeurs nes sont pas définies par la boucle imbriquée. En clair :
<BOUCLE_a(ARTICLES){id_article}>
<BOUCLE_B(AUTEURS){id_article}>
#TITRE
=> l’auteur n’a pas de “titre”, la balise affiche donc le titre de l’article.
Le test d’existence est certainement un is_null(). Si tu trouves par quoi le remplacer pour résoudre le bug que tu signales sans casser cela, n’hésite pas. C’est peut-être un is_null() à remplacer par un in_array(array_keys(………))…
La raison, je pense, est que SPIP fournit les valeurs d'une boucle
supérieure à une boucle imbriquée quand ces valeurs ne sont pas définies par
la boucle imbriquée.
merci Fil de ta réponse,
c'est cela en effet, il faudrait ajouter quelque part un test qui continue de
retourner la valeur de la boucle supérieur seulement si le champ demandé
n'existe pas dans la boucle actuellement traitée
j'ai bien trouvé le champ $boucle->return; au niveau du compilateur mais je ne
sais pas ou celui-ci est alimenté.
Actuellement ça donne ça (on voit bien que ça recherche la valeur dans les
boucles ascendantes) :
ecrire/public/reference.php, dans la fonction index_pile:
remplacer
$conditionnel[] = "isset($champ)?$champ";
par
$conditionnel[] = "(isset($champ) OR array_key_exists($c,\$Pile[\$SP" . ($i ?
"-$i" : "") . "]))?$champ";
de ce fait, on teste l'existence du champ à la source, même si ce champ renvoi
une valeur null, ce qui est cohérent pour les champs déclaré null possible en
base