Les boucles récursives sont une fonction très puissante pour gérer la mise en forme de l’interface. Leur programmation est particulièrement simple, mais leur utilisation demande une bonne maîtrise logique de l’enchaînement des boucles.
L’appel d’une boucle récursive est très simple : il suffit d’indiquer dans le TYPE de la boucle le nom d’une autre boucle :
<BOUCLEn(bouclex)></BOUCLEn>
Il n’y a ici aucun critère : en réalité, la boucle n correspond à une copie pure et simple de la boucle x. L’ensemble de la boucle fonctionne comme si l’on avait recopié l’intégralité de la boucle x (toutes les balises et le code HTML, ainsi que les textes conditionnels avant, après et alternatif) à l’endroit où l’on insère la boucle n. (Il faut bien entendu que la boucle x précède la boucle n.)
L’utilisation la plus simple consiste à « dupliquer » une boucle sans avoir à la recopier. Ainsi, toute modification de la boucle d’origine x sera automatiquement dupliquée dans la boucle n.
Tout l’intérêt, en réalité, consiste à placer la boucle n à l’intérieur de la boucle x : on obtient ainsi un comportement récursif : la boucle x contient une boucle n, qui elle-même reproduit la boucle x qui contient la boucle n, et ainsi de suite, jusqu’à ce que la boucle x ne donne plus aucun résultat.
Cette technique permet de créer notamment l’affichage des thread des forums. Cela devient très simple : une première boucle « fabrique » l’entrée des threads (les messages qui répondent directement à un article), une seconde boucle affiche les réponses à ces messages, et une boucle récursive provoque la récursivité sur cette seconde boucle :
<BOUCLE_forum(FORUMS){id_article}>
<P>#TITRE
<B_reponses>
<UL>
<BOUCLE_reponses(FORUMS){id_parent}>
<LI>#TITRE
<BOUCLE_recursive(boucle_reponses)>
</BOUCLE_recursive>
</BOUCLE_reponses>
</UL>
</B_reponses>
</BOUCLE_forum>
On peut ainsi, en très peu de lignes, provoquer l’affichage de l’intégralité de la structure (rubriques, sous-rubriques...) du site.