[spip-dev] #SESSION fonctionne sans boucle après la condition

Bonjour à tous,

Voilà, j'ai un code (qui me semble bon à première vue, ainsi qu'à deuxième vue :D) qui ne fonctionne pas à cause des boucles que j'ai fait ; voici le code :

[([(#SESSION{id_auteur})]|oui)
[(#ONGLETS_DEBUT{Bienvenue})]
  <BOUCLE_sommaire_dash(ARTICLES) {id_rubrique=19} {id_mot=25}{!par date}{0,1}>
    <p class="#EDIT{titre} titre">#TITRE</p>
    <p class="#EDIT{texte} texte">#TEXTE</p>
  </BOUCLE_sommaire_dash>
[(#ONGLETS_TITRE{Profil})]
  [(#FORMULAIRE_EDITER_AUTEUR{#SESSION{id_auteur}})]
[(#ONGLETS_TITRE{Messagerie})]
  blah blah blah
[(#ONGLETS_TITRE{Extras})]
  blah blah blah blah
[(#ONGLETS_TITRE{Aide})]
  <BOUCLE_aide(ARTICLES) {id_rubrique=21}{par titre}>
    <p class="#EDIT{titre} titre">#TITRE</p>
    <p class="#EDIT{texte} texte">#TEXTE</p>
  </BOUCLE_aide>
#ONGLETS_FIN
]

Lorsque les boucles ne sont pas présentes, cela fonctionne à merveille, mais lorsqu'elles y sont, cela m'affiche :
[(1|oui) et après les onglets ]
De plus, lorsque je suis déconnecté, les onglets apparaissent tout de même !

Il y a-t-il une solution, ce problème a-t-il déjà été répertorié ?

Merci d'avance.

Je dirais que le filtre |oui (et sans doute |non) dur core à un petit bug…

la premiere "(" ne veut rien dire.

Committo,Ergo:Sum

JamesNicolas a écrit :

Bonjour à tous,

Voilà, j'ai un code (qui me semble bon à première vue, ainsi qu'à deuxième vue :D) qui ne fonctionne pas à cause des boucles que j'ai fait

A mon avis c'est une limitation du compilateur, et ce qui tu lui demandes
est trop compliqué (imbrication trop profonde).

Pour simplifier et rendre plus digeste il y a 2 moyens :
- utiliser des #SET préalables pour calculer des gros morceaux intermédiaires
- faire des INCLURE pour d'autres gros morceaux
Comme ça, toutes les expressions restent plus simples.

évidement, ce serait sympa que le compilateur connaisse mieux ses limites
et détecte lorsqu'elles sont dépassées, mais ça ne semble pas être son type.

JL

[([(#SESSION{id_auteur})]|oui)
[(#ONGLETS_DEBUT{Bienvenue})]
<BOUCLE_sommaire_dash(ARTICLES) {id_rubrique=19} {id_mot=25}{!par
date}{0,1}>

(...)

   &lt;/BOUCLE\_sommaire\_dash&gt;

(...)

   &lt;BOUCLE\_aide\(ARTICLES\) \{id\_rubrique=21\}\{par titre\}&gt;

(...)

   &lt;/BOUCLE\_aide&gt;

#ONGLETS_FIN
]

On peut imbriquer des boucles dans des balises ???

J'étais persuadé que c'était impossible !?? Tu es sûr que le bug n'est pas là ?

concernant les inclure pour les boucles, j'ai déjà fait, ça ne veut pas fonctionner.

Je supposes que c'est là, mais c'est tout de même un peu une aberration de ne pas pouvoir le faire : masquer selon si on est identifié ou pas. Non ?
Mais comment faire des boucles en dehors des balises sinon qui ne sont calculées que si on est enregistrés... pcq sinon ça peut devenir lourd deux calculer des boucles inutiles.

Concernant la première (, elle fermait après le |oui
J'ai aussi essayé :

[(#SESSION{id_auteur}|oui) boucles ]
[([(#SESSION{id_auteur})]|oui) boucles ]
et d'autres aussi absurdes :smiley:

désolé de ne pas avoir répondu à la liste à chaque fois, j'oublie tjrs '^^

Et paraît que j'ai changé de fil donc voilà, là ça devrait plus changer si j'ai compris ce que l'on me disait. Désolé, je m'y perd encore sur les réponses sur la liste :s

Il y a d'autres moyens comme le plugin Bonux ou encore d'utiliser des
fausses boucles pour conditionner (tu trouveras pas mal d'exemples sur
le net, notamment dans les listes de discussion)

Ah tiens... je viens de retrouver un ex. de fausse boucle
conditionnelle (sans Bonux):
http://www.spip-contrib.net/Balise-SESSION?tous=oui#forum402744

(justement sur ce thème)

Comme l'indique Bertrand, et c'est la bonne réponse à ta question :
il n'est pas possible de faire une boucle dans une balise :
[(#BALISETRUC)
<BOUCLE_toto(...)..>

</BOUCLE_toto>
]

n'est pas accepté par le compilateur.
La seule solution est de mettre la boucle dans une inclusion et de mettre l'inclure dans la balise.

Cédric

Comme l'indique Bertrand, et c'est la bonne réponse à ta question :
il n'est pas possible de faire une boucle dans une balise :
[(#BALISETRUC)
<BOUCLE_toto(...)..>

</BOUCLE_toto>
]

n'est pas accepté par le compilateur.
La seule solution est de mettre la boucle dans une inclusion et de mettre
l'inclure dans la balise.

Non ce n'est pas la seule :slight_smile:

<BOUCLE_test(ARTICLES){0,1}>[(#BALISETRUC)]</BOUCLE_test>
    <BOUCLE_toto(...)..> ... </BOUCLE_toto>
</B_test>

C'est un peu honteux de solliciter la table spip_articles pour rien,
mais ça marche.

-- Fil