[1.9] doublons conditionnel

Salut

J'ai un problème assez étonnant avec la conception d'un squelette en y
inserant des bloc conditionnels php (if else).
J'ai des catégories associées à des mots clé, et je souhaite les exclure de
la boucle rubrique. J'utilise donc le critère doublon, en faisant une boucle
vide avec les rubriques à exclure. Ensuite, j'exécute la boucle rubrique
avec le critère doublon de manière à ne pas afficher les rubriques
précédemment listées.

Un petit exemple pour illustrer :
<BOUCLE_exclure_intra(RUBRIQUES){tout} {titre_mot=intranet} {doublons}>
</BOUCLE_exclure_intra>

<BOUCLE_rubriques(RUBRIQUES) {racine} {!lang_select} {doublons} {par num
titre, titre}>
  <li>#TITRE</li>
</BOUCLE_rubriques>

Avec cet exemple, je liste donc toutes les rubriques, sauf celles qui ont le
mot clé "intranet" associé. Cela fonctionne.

Maintenant, sur le même principe, je souhaite changer les rubriques à
exclure en fonction du statut de l'utilisateur (admin, redac, invité). Je
fais donc mes boucles doublons dans des blocs conditionnels :

<?
if ($GLOBALS['auteur_session']['statut'] == '0minirezo')
{
?>
<BOUCLE_exclure_intra(RUBRIQUES){tout} {titre_mot=intranet}
{doublons}>intranet exclus
</BOUCLE_exclure_intra>
<?
}else{
?>
<BOUCLE_exclure_extra(RUBRIQUES){tout} {titre_mot=extranet}
{doublons}>extranet exclus
</BOUCLE_exclure_extra>
<? } ?>

Ce code est donc censé exclure les rubriques ayant pour mot clé intranet au
cas où le statut est admin, et le mot clé extranet sinon.

Et là, ca ne fonctionne pas, il semble que les 2 boucles soient constamment
exécutées, quel que soit le résultat du if, même si elles n'affichent rien.
En effet, si je suis admin, spip affiche bien "intranet exclus" et pas
"extranet exclus", mais il exclut quand même les rubriques extranet !! Si je
supprime la boucle extranet, les rubriques extranet réapparaissent, ce qui
laisse supposé que le bloc conditionnel else est exécuté, or il ne l'est pas
(vérifié par des echo).

Donc les boucles semblent être exécutées même si le code php dit que non. Le
parseur de spip exécute quand même la boucle, charge le critère doublon, et
donc n'affiche pas les rubriques en question dans la boucle rubrique.

Voilà, j'espère que j'ai su exposer mon problème et que quelqu'un pourra me
répondre. Je devrais peut-être poster ca sur la liste de dev, mais je ne
sais pas où on s'inscrit !

Merci d'avoir lu mon roman !

Ben

spip-bounces@rezo.net wrote:

Et là, ca ne fonctionne pas, il semble que les 2 boucles
soient constamment exécutées, quel que soit le résultat du
if, même si elles n'affichent rien.

Le 11 août 06, à 17:16, B. Watine a écrit :
Donc les boucles semblent être exécutées même si le code php dit que non. Le
parseur de spip exécute quand même la boucle, charge le critère doublon, et
donc n'affiche pas les rubriques en question dans la boucle rubrique.

normal me semble t-il, pour une question de phasage : le compilateur exécute d'abord les boucles spip de ton squelette en ignorant tout le reste, ce qui génére un fichier cache avec du html, du java, du php, etc ... mais ou il n'y a plus trace des boucles spip ... ton critère doublon qui s'execute *avant* ne peut etre influencé par un code php qui s'exécute *apres*

plus d'explication "http://www.spip-contrib.net/SPIP-PHP-et-Javascript-sont-dans&quot;

cordialement
NRiquois

Le 11 août 06, à 17:50, nicolasriq@free.fr a écrit :

Le 11 août 06, à 17:16, B. Watine a écrit :
Donc les boucles semblent être exécutées même si le code php dit que
non. Le
parseur de spip exécute quand même la boucle, charge le critère
doublon, et
donc n'affiche pas les rubriques en question dans la boucle rubrique.

normal me semble t-il, pour une question de phasage : le compilateur
exécute d'abord les boucles spip de ton squelette en ignorant tout le
reste, ce qui génére un fichier cache avec du html, du java, du php,
etc ... mais ou il n'y a plus trace des boucles spip ... ton critère
doublon qui s'execute *avant* ne peut etre influencé par un code php
qui s'exécute *apres*

plus d'explication
"http://www.spip-contrib.net/SPIP-PHP-et-Javascript-sont-dans&quot;

je complète : peut être (j'ai pas poussé le raisonnement) que tu pourrais utiliser les "filtres de test" ici "http://www.spip.net/fr_article901.html&quot;

@+
NRiquois

-----Message d'origine-----
De : spip-bounces@rezo.net [mailto:spip-bounces@rezo.net] De la part de
nicolasriq@free.fr
Envoyé : vendredi 11 août 2006 17:57
Cc : spip@rezo.net
Objet : Re: [Spip] [1.9] doublons conditionnel

Le 11 août 06, à 17:50, nicolasriq@free.fr a écrit :

>> Le 11 août 06, à 17:16, B. Watine a écrit :
>> Donc les boucles semblent être exécutées même si le code php dit que
>> non. Le
>> parseur de spip exécute quand même la boucle, charge le critère
>> doublon, et
>> donc n'affiche pas les rubriques en question dans la boucle rubrique.
>
> normal me semble t-il, pour une question de phasage : le compilateur
> exécute d'abord les boucles spip de ton squelette en ignorant tout le
> reste, ce qui génére un fichier cache avec du html, du java, du php,
> etc ... mais ou il n'y a plus trace des boucles spip ... ton critère
> doublon qui s'execute *avant* ne peut etre influencé par un code php
> qui s'exécute *apres*
>
> plus d'explication
> "http://www.spip-contrib.net/SPIP-PHP-et-Javascript-sont-dans&quot;

je complète : peut être (j'ai pas poussé le raisonnement) que tu
pourrais utiliser les "filtres de test" ici
"http://www.spip.net/fr_article901.html&quot;

@+
NRiquois

Hum effectivement, mon exemple ne risque pas de fonctionner si les boucles
spip sont exécutées sans tenir compte du php.

Je pense que les filtres de test ne peuvent pas fonctionner car ils
s'appliquent à des balises spip, or je dois tester une variable php
($GLOBALS['auteur_session']['statut']).

Je vais surement faire des blocs contenant chacun mes 2 boucles (exclusion
puis listage des rubriques), et les mettre dans des blocs conditionnels php.

Si quelqu'un voit une solution plus propre, qu'il n'hésite pas !

Merci beaucoup pour ces précisions, je n'y comprenais plus rien :slight_smile:

Ben