Categories > TinyButStrong general (FR) >

merge block et condition - besoin d'aide

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: xba
Date: 2007-04-02
Time: 13:49

merge block et condition - besoin d'aide

Bonjour, Je vous explique la situation.
J'ai une table de base de données avec des activités. Dans un formulaire, je veux afficher les activités avec une checkbox. Lorsque dans ma table, le champs ACT_ok est à 0, je ne dois plus afficher la checkbox mais le texte "complet". De plus, si le formulaire n'est pas correct, les activités selectionnées doivent apparaître lors de la demande de correction du formulaire.

Comment réaliser cela?

code coté php:
...
if(isset($_POST['par_activity']))
    $activitySelected = $_POST['par_activity'];
else
    $activitySelected = 0; // activités sélectionnées dans mon formulaire

$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('xxx.htm');
$TBS->MergeBlock('blkActivities',$arrayActivity); // résultat de ma table des activités.

$TBS->Show();

coté html:
...
  <tr bgcolor="#F0F0F0">
    <td>
        <div>
        <input name="par_activity[]" type="checkbox" value="[blkActivities.ACT_ID]" />
[var.activitySelected;ope=html;select=par_activity[]]
[onshow;block=div;when [blkActivities.ACT_ok]=1]
        </div>
        <div>
        <%Complet%>[onshow;block=div;when [blkActivities.ACT_ok]=0]
        </div>
    </td>
    <td>[blkActivities.ACT_ID_Interne]</td>
    <td>[blkActivities.ACT_Designation;block=tr]</td>
    <td><div align="center"><a href="#" onmouseover="ajax_showTooltip('../register/register.activity.php?id=[blkActivities.ACT_ID]',this);return false" onmouseout="ajax_hideTooltip()">?</a></div></td>
  </tr>
...

Cela fonctionne bien si il y a peu d'activités dans la base. Mais ça devient vitre très lent (plus de 40 sec) avec 150 activités. Cela à cause du onshow comme expliqué dans la FAQ. Je ne peux pas utiliser de onload car mon block n'est pas encore fusionné.
Le challenge: comment réaliser ma demande tout en restant rapide d'exécution !?! merci d'avance pour votre aide car je suis perdu.
By: Skrol29
Date: 2007-04-03
Time: 01:21

Re: merge block et condition - besoin d'aide

Salut Xba,

Tu peux améliorer tes perf en construisant le bloc "blkActivities" avec 2 section "when" au lieu d'une seule section avec des [onshow]

<tr>
    <td><input name="par_activity[]" type="checkbox" value="[blkActivities.ACT_ID]" /></td>
    <td>[blkActivities.ACT_ID_Interne]</td>
    <td>[blkActivities.ACT_Designation;block=tr;when [blkActivities.ACT_ok]=1]</td>
</tr>
<tr>
    <td><%Complet%></td>
    <td>[blkActivities.ACT_ID_Interne]</td>
    <td>[blkActivities.ACT_Designation;block=tr;when [blkActivities.ACT_ok]=0]</td>
</tr>

Pour la section des cases à cocher : ne pas mettre le champ spécial de sélection dans une zone qui va être démultipliée par une fusion. Sinon tu demandes à TBS de refaire la sélection globale autant de fois qu'il y a de ligne !
Glisse plutôt ton champ [var.activitySelected;ope=html;select=par_activity[]] en dehors du bloc "blkActivities", par exemple entre le <table> et le <tr>, en ajoutant "bounds=selbounds".
Si l'utilisation de "ope=html" s'avère tout de même trop couteuse pour ton modèle, tu peux changer soit en ajoutant un champ spécifique à tes  enregistrements grace au paramètre "ondata", soit en utilisant une solution de sélection par Javascript.