Categories > TinyButStrong general (FR) >

Probleme d'affichage conditionnel dans une boucle

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Nono66
Date: 2006-01-09
Time: 11:49

Probleme d'affichage conditionnel dans une boucle

Bonjour,

Je rencontre actuellement un probleme d'affichage conditionnel dans une boucle généré par la lecture d'une base de donnée.

dans mon html j'ai :

<TABLE border=1 cellpadding=0 cellspacing=0 width=100% class='font01'>
    <TR class='[blk1.chap_id_niveau;if [val]=1;then 'font04';else 'font05']'>
     <TD align=center>[blk1.chap_libelle;block=table]</TD>
    </TR>

    <TR class='[blk1.chap_id_niveau;if [val]=1;then 'font04';else 'font05']'>
     <TD align=right>
      <TABLE border=0 cellpadding=0 cellspacing=0 class='font06'>
       <TR>
        <TD align=right>[onload_nivo1a;block=tr;when [var.habil12]=1][var.voc_affichage_01] : <span>[onload_nivo1b;block=span;when [blk1.chap_id_niveau]=1]<A href='ajout_chapitre.php?idtms=[var.idtms]&chaplv=2' target='_self' hidefocus><FONT class='font06'>[var.voc_affichage_03]</FONT></A> - </SPAN><A href='ajout_tache.php?idtms=[var.idtms]&chaplv=0' target='_self' hidefocus><FONT class='font06'>[var.voc_affichage_04]</FONT></A></TD>
       </TR>
       <TR>
        <TD align=right>[onload_nivo1c;block=tr;when [var.habil123]=1][var.voc_affichage_05]</TD>
       </TR>
       <TR>
        <TD align=right>[onload_nivo1d;block=tr;when [var.habil12]=1][var.voc_affichage_06]</TD>
       </TR>
      </TABLE>
     </TD>
    </TR>

   </TABLE>

et dans mon PHP

$TBS->MergeBlock('blk1',$dbtms,$sql) ;

Les variables sont implémenté via un fichier de langage chargé au debut de la page.

Pour ce qui est du probleme par lui même :

Avec des onload :
le block conditionnel se repette pour toutes les ligne mais la condition du SPAN
[onload_nivo1b;block=span;when [blk1.chap_id_niveau]=1]
n'est resolut que sur la premiere ligne et ensuite plus jamais (or pour ma part il me faut cette resolution sur chaque enregistrement)

Avec des onshow :
c'est encore pire, le block conditionnel est affiché au 1er enregistrement puis n'est plus jamais affiché.

Auriez vous une solution a mon probleme ? Est ce impossible ? Un bug ?

Merci d'avance de votre reponse.
By: Skrol29
Date: 2006-01-09
Time: 12:57

Re: Probleme d'affichage conditionnel dans une boucle

Salut Nono66,

Tu as fait une erreur commune (que je vais d'ailleurs finir par ajouter à la FAQ...). Tu as utilisé des champs lié à un bloc fusionné dans une condition de bloc automatique [onload]. Mais [onload] est toujours évalué avant les fusions, en effet ils sont fusionné sur le premier appel de LoadTemplate().

Je te suggère de les remplacer par des [onshow]. Mais du coup, retire les suffixes car sinon tu vas avoir de drôles de surpises : tout ce qui est entre les sections sera supprimé. C'est peut être ce qu'il t'arrive.
By: Nono66
Date: 2006-01-09
Time: 14:44

Re: Probleme d'affichage conditionnel dans une boucle

Oki, en fait c'est tout con. par contre j'ai une question qui va surement être un peut bête mais je pensais que les sufixes servait a differencier les différent bloque, hors visiblement ce n'est pas le cas, donc a quoi servent les suffixes ??????

Autres soucis, je n'utilise pas le cache TBS (je n'ai rien changer a la conf par defaut) mais sous IE (même si j'ai le cache au minimum avec "a chaque visite de la page de coché) et PHP 5 + TBS 2.05.5 les pages ne se rafraichisse pas et ce même en appuyant sur F5 ou en fesant reactualisé. Ce problème n'est present chez moi qu'avec PHP 5 + TBS 2.05.5 car pour tout mes autres projets que se soit en PHP 4 ou 5 sans TBS, ça fonctionne parfaitement. Y'aurai-t-il une explication existante a ce sujet ?? Un cache par defaut a supprimer ?

Merci d'avance.
By: Skrol29
Date: 2006-01-09
Time: 15:29

Re: Probleme d'affichage conditionnel dans une boucle

> je pensais que les sufixes servait a differencier les différent bloque

Plus exactement les suffixes servent à regrouper les blocs pour lesquels les conditions sont exclusives. Ces blocs doivent avoir des sections contigües (comme les blocs normaux) sous peines de voir disparaître tout ce qui se trouvent entre les sections.

Exemples :
  <div>[onload;block=div;when [var.x]=1]</div>
    aaaa
  <div>[onload;block=div;when [var.y]=1]</div>
    bbbb
  <div>[onload;block=div;when [var.z]=1]</div>
Si ($x=1) et ($y=1) => les deux premières sections sont affichées.
aaaa et bbbb sont toujours affichés.

  <div>[onload_1;block=div;when [var.x]=1]</div>
    aaaa
  <div>[onload_1;block=div;when [var.y]=1]</div>
    bbbb
  <div>[onload_1;block=div;when [var.z]=1]</div>
Si ($x=1) et ($y=1) => seule la première section est affichée.
aaaa et bbbb sont toujours supprimés car ils se trouvent être des sections d'un même bloc.


> les pages ne se rafraichisse pas et ce même en appuyant sur F5

Je rencontre parfois ce problème. Cela vient de la gestion parfois bizaroïde du cache de la part des navigateurs Web. Pour la neutraliser, j'ajoute un '&' derrière l'URL et le navigateur force sont rafraîchissement.
Exemple : http://localhost/test.php&
By: phil
Date: 2006-10-09
Time: 17:10

Re: Probleme d'affichage conditionnel dans une boucle

mot clef several =>
[onload_nivo1a;block=tr;when [var.habil12]=1;several]