Categories > TinyButStrong general (FR) >

Code HTML conditionnel?

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: dede
Date: 2007-09-13
Time: 14:24

Code HTML conditionnel?

Bonjour à tous,
c'est encore moi, le gars qui essai de faire un formulaire de requète SQL et qui galère comme pas 2!!

Je commence à attaquer des problèmes assez complexe avec TBS et en voici un que je n'arrive pas à résoudre. Je vais bien vous l'expliquez pour que vous compreniez car c'est pas forcément facile...

Je suis donc en train de faire un formulaire de requète sur lequel on peut choisir le nombre de colonne que l'on voudra afficher puis ensuite quelles colonnes on veux afficher.
Pour choisir les colonnes à afficher, on passe par une liste déroulante. Comme le nombre de colonne (et donc le nombre de liste) a afficher varie en fonction de ce que l'utilisateur aura choisi, j'ai créer un seul tableau qui regroupe tous les noms de colonne que je merge plusieurs fois en fonction du nombre de colonne choisies à afficher.
Jusqu'ici ça va?

Bon, le problème c'est que j'aimerai mémoriser quelles colonnes on été sélectionnées dans les différentes listes et donc pouvoir les reselectionner à chaque chargement de la page. Mais comment je fais ça sachant que je n'ai qu'un seul tableau pour toutes mes listes??

Bon heureusement, j'ai un autre tableau qui regoupe les labels de chaquns des tableaux donc j'y ai rajouté le code de la colonne sélectionnée (que j'ai récupéré grace a POST ou SESSION) mais il faudrait que je puisse rajouter "selected" dans ma ligne d'option quand le code que je vais créer correspond au code qu'il y'a dans le tableau regroupant les labels, vous comprenez?

Il faudrait donc que je puisse créer du code htlm de manière conditionnelle.

Voici mon code HTML pour la création d'une liste :

        <select name="[blkCritere.SelId;block=textserach]">
            <option value="[blkCritereOpt.code;block=option;p1=[blkCritere.SelId]]" [block=option;if [blkCritereOpt.code]=[blkCritere.code];then 'selected']>[blkCritereOpt.label]</option>
        </select>

Le problème est que le blocks conditionnel n'est pas pris en compte par TBS... En fait, je crois qu'on ne peut pas l'utiliser dans ces conditions...
Dans la doc j'ai pas trouvé grnad chose qui pourrait m'aider à faire ça.

Donc j'ai 2 questions (en fait 3 ;) ) :
* Est-ce possible de faire ça?
    *Si oui comment?
    *Si non y'a-t-il un autre moyen de faire ce que je veux faire?

Je sais que je dois paraître ennuyeux avec mes problème à la c** mais bon je galère vraiment a utiliser TBS et en même temps je me dis que c'est un outils puissant et j'ai pas trop envis de m'en séparer après tant d'effort :D.

Merci de votre aide,
dede
By: Skrol29
Date: 2007-09-14
Time: 01:20

Re: Code HTML conditionnel?

Salut,

J'ai déjà eu à faire un truc dans le genre.

Étant donné que tu as plusieurs listes, il vaut mieux éviter de vérifier tous les items de toutes les liste pour savoir laquelle il faut sélectionner ou pas.

Le mieux est de fusionner les items <option > avant le fusionner les items <select> car dans ton cas les <option> sont communs à tous les <select>
Après ça, tu peux fusionner les <select>. Pour appliquer l'attribut "selected" aux bon items, tu peux soit utiliser le plug-in HTML qui offre cette fonctionnalité mais qui devient couteuse si tu as beaucoup de séecltion à faire (disons plus de 20), soit utiliser du code Javascript qui va opérer la sélection d'item.

Dernière astuce : n'oublie pas que tu peux utiliser des nom de balise <select> avec des crochets, ce qui a pour effet de retourner l'info sous forme d'un tableau dans le script PHP cible du formulaire.

Version plug-in HTML :
<select name="col_sel[[col_chx.key;block=textserach]]">
  <option value="[col_lst.nom;block=option]">[[col_lst.nom]</option>
  <option>[col_chx.val;ope=html;select]</option>
</select>

Version Javascript :
<select name="col_sel[[col_chx.key;block=textserach]]">
  <option value="[col_lst.nom;block=option]">[[col_lst.nom]</option>
</select>
...
<script type="text/javascript"> f_init_selection(); </script>
</body>

PHP:
if (isset($_POST['col_sel'])) {
  $colonne_choix = $_POST['col_sel'];
} else {
  ... // initialisation de $colonne_choix avec le bon nombre d'item
}
$TBS->MergeBlock('col_lst',$colonne_liste);
$TBS->MergeBlock('col_chx',$colonne_choix);
By: dede
Date: 2007-09-17
Time: 12:00

Re: Code HTML conditionnel?

Salut Skrol29,

Merci pour ta réponse ;).
Par contre, je n'y arrive toujours pas... En fait, je vois pas comment tu fais pour fusionner les items <option> avant?

En fait j'ai un tableau avec les items de ma liste, je le fusionne de cette manière :

Code PHP :
//Initialisation du tableau
$tabOptions = array();
$tabOptions[] = array('code' => 'ORTHO', 'label'=>'Orthographe', 'group'=>'string');
$tabOptions[] = array('code' => 'PHON', 'label'=>'Code phonetique', 'group'=>'string');
$tabOptions[] = array('code' => 'SYNT', 'label'=>'Catégorie syntaxique', 'group'=>'string');
$tabOptions[] = array('code' => 'U', 'label'=>'Freq/Million', 'group'=>'numeric');
//...

//On le fusionne
$index -> MergeBlock('blkOpt', 'array', $tabOptions);

//Puis je créer un tableau qui regroupe les ID (key) et le code de //l'élément selectionné que je fusionne aussi
//Je passe la création du tableau...
$index -> MergeBlock('blkChamp', 'array', $tabChamps);

Ensuite dans mon code HTML, si je veux avoir plusieurs liste, je suis obliger de mettre "p1=[blkChamp.SelId]" dans ma ligne d'option, ce que tu ne fais pas et c'est ça que je comprend pas.
Ca donne ça mon select :
<select name="[blkChamp.SelId;block=select]">
            <option value="[blkOpt.code;block=option;p1=[blkChamp.SelId]]">[blkOpt.label]</option>
</select>

J'aimerai bien savoir comment tu fais ;).

Encore merci de ton aide et désolé si je comprend pas :s.

A+
dede