Categories > TinyButStrong general (FR) >

[fr] Rapport de bug

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Agamemnon
Date: 2004-03-16
Time: 09:48

[fr] Rapport de bug

Lors de l'utilisation d'une zone de liste dont les options sont remplies par un MergeBlock et que cette liste est répétée sur chaque ligne d'une table résultant elles aussi d'un MergeBlock, la fonction qui permet d'avoir une ligne sur deux (ou sur n) de couleur différente ne fonctionne pas.
Ex: Partie HTML
<table>
<tr bgcolor=white>[Users;block=tr]
    <td>
      <select name="Profil" class="txt-form">
        <option value="[Profils.ID;block=option;noerr]">[Profils.LIBELLE;noerr]</option>
        <option value="[Users.Profil;block=option;noerr;selected]"></option>
      </select></td>
</tr>
<tr bgcolor=red>[Users;block=tr]
    <td>
      <select name="Profil" class="txt-form">
        <option value="[Profils.ID;block=option;noerr]">[Profils.LIBELLE;noerr]</option>
        <option value="[Users.Profil;block=option;noerr;selected]"></option>
      </select></td>
</tr>
</table>
partie PHP
  require('scripts/tbs_class.php');
  $TBS = new clsTinyButStrong;
  $TBS->LoadTemplate("MonTemplate");
  $TBS->MergeBlock("Profils",$cnx,"SELECT * FROM MESPROFILS");
  $TBS->MergeBlock("Users",$cnx,"SELECT * FROM MESUTILISATEURS");
  $TBS->Show();

Cependant, en utilisant pour la ligne 2, le code suivant
<tr bgcolor=red>[Users;block=tr]
    <td>
      <select name="Profil" class="txt-form">
        <option value="[ProfilsBis.ID;block=option;noerr]">[ProfilsBis.LIBELLE;noerr]</option>
        <option value="[Users.Profil;block=option;noerr;selected]"></option>
      </select></td>
</tr>
et en ayant le code PHP suivant
  require('scripts/tbs_class.php');
  $TBS = new clsTinyButStrong;
  $TBS->LoadTemplate("MonTemplate");
  $TBS->MergeBlock("Profils",$cnx,"SELECT * FROM MESPROFILS");
  $TBS->MergeBlock("ProfilsBis",$cnx,"SELECT * FROM MESPROFILS");
  $TBS->MergeBlock("Users",$cnx,"SELECT * FROM MESUTILISATEURS");
  $TBS->Show();

Il est dommage d'avoir à effectuer deux requêtes couteuses en ressources alors qu'ici une seule suffit. Il est possible d'effectuer cette requête en amont, de stocker le résultat dans un tableau mais l'élégance de la solution ne colle pas bien à la démarche d'écriture que vous avez entrepris en développant la classe clsTinyButStrong.

cordialement,
By: Skrol29
Date: 2004-03-17
Time: 22:33

Re: [fr] Rapport de bug

Salut,

Dans ton HTML, le block Users est défini un coup sur la ligne du tableau (tr), un coup sur la ligne d'option (option). Comme l'un englobe l'autre ça ne peut pas marcher.

Si tu veux répeter une zone de liste sans relancer la requête pour son contenu tu peux t'y prendres de plusieurs façons.

Par exemple, tu peux mettre les données dans une variable, tableau puis la fusionner avec la méthode des sous-blocs.

Tu peux aussi placer la liste à remplir dans un bloc, tu remplies la liste une fois, tu récupères le contenu du block entier avec GetBlockSource() et tu le refusionne autant de fois que tu veux avec des champs [var.*] par exemple.
By: Agamemnon
Date: 2004-03-18
Time: 08:29

Re: [fr] Rapport de bug

Si le block Users est défini sur la ligne de tableau (tr), c'est que par soucis de simplification, je n'est pas fait mention des colonnes (td) précédant celle où se trouve la liste. Dans celles-ci, figure les autres champs de la table (de données et non HTML) qui sont mis à jour par le script PHP.

Si j'ai bien compris la solution utilisant le GetBlockSource(), peux-tu me donner des détails sur la solution proposée dans le paragraphe précédent ?

Thx
By: Agamemnon
Date: 2004-03-18
Time: 08:51

Re: [fr] Rapport de bug

Inutile de chercher, j'ai trouvé la solution.

Il suffit d'ajouter un paramètre factice lors de la déclaration des blocs Profils
p1=''
, et de n'avoir qu'un appel de MergeBlock() pour Profils et cela fonctionne. Je vous donne le code pour PHP et HTML. En ajoutant ce paramètre, on détourne la fonction de sous-bloc qui boucle sur chacun des blocs Profils qu'elle trouve.

Partie HTML
<table>
<tr bgcolor=white>[Users;block=tr]
    <td>
      <select name="Profil" class="txt-form">
        <option value="[Profils.ID;block=option;noerr;p1='']">[Profils.LIBELLE;noerr]</option>
        <option value="[Users.Profil;block=option;noerr;selected]"></option>
      </select></td>
</tr>
<tr bgcolor=red>[Users;block=tr]
    <td>
      <select name="Profil" class="txt-form">
        <option value="[Profils.ID;block=option;noerr;p1='']">[Profils.LIBELLE;noerr]</option>
        <option value="[Users.Profil;block=option;noerr;selected]"></option>
      </select></td>
</tr>
</table>

partie PHP
  require('scripts/tbs_class.php');
  $TBS = new clsTinyButStrong;
  $TBS->LoadTemplate("MonTemplate");
  $TBS->MergeBlock("Profils",$cnx,"SELECT * FROM MESPROFILS"); // Ici par d'utilisation de p1 comme paramètre de la requête
  $TBS->MergeBlock("Users",$cnx,"SELECT * FROM MESUTILISATEURS");
  $TBS->Show();


Encore merci.