#INTRODUCTION au sein d'une boucle condition imbriqué

Remontée du problème

Problème remonté ici https://discuter.spip.net/t/gerer-une-news-letter-sous-spip-4/160602/5

En voulant reproduire et enquêter, j'ai trouvé trois sous problème.

Exemple

<BOUCLE_e(RUBRIQUES){id_rubrique=1}>
<h1>#ID_RUBRIQUE</h1>
<div>
	Ca marche :<br />
	#INTRODUCTION
</div>
<BOUCLE_condition(CONDITION){si #VAL{3}|>{2}}>[(#REM) On s'en fiche du test, cela ne concerne que la demo)]
<div>
	Ca marche pas<br />
	#INTRODUCTION
</div>
<div>
	Ca marche pas plus<br />
	[(#_e:INTRODUCTION)]
</div>
</BOUCLE_condition>
</BOUCLE_e>

Le problème se pose au niveau de la génération du code de la balise #INTRODUCTION lorsqu'on se trouve dans une boucle condition.

Résultat de la compilation du squelette

  • En spip 4 interdire_scripts(generer_introduction_entite(@$Pile[0]['id_condition'], 'CONDITION', array(), null, null, null, $connect))
  • En SPIP 4.1 : interdire_scripts(generer_objet_introduction(($Pile[0]['id_condition'] ?? null), 'CONDITION', array(), null, null, null, $connect)) .

Les problèmes sont donc

  1. En spip 4.1 -> provoque une fatal, car generer_objet_introduction() refuse null en entrée.
  2. il faudrait à minima que si on indique explicitement la boucle (via la syntaxe #_e:INTRODUCTION cela soit pris en compte)
  3. et encore mieux : arriver à faire que #INTRODUCTION remonte la hierarchie des boucles si jamais la boucle mère n'est pas de type "OBJET".
Modification effectuée par JamesRezo