Categories > TinyButStrong general (FR) >

[FR] Problème d'affichage conditionnel

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Muf
Date: 2005-07-08
Time: 11:12

[FR] Problème d'affichage conditionnel

Bonjour,

J'utilise TBS depuis peu de temps à l'occasion d'un stage et la structure du système oblige une génération automatique des formulaires de saisies suivant le type de l'objet à saisir.

Les éléments des formulaires ont des identifiants formatés de façon standard, et les objets sont repérés par des balises div comme par ex :
id="form:nomForm.Object:nomObject.ObjectNumber:nObject"

Seulement, pour repérer les sous-objets, il faut garder comme info le nom que prend l'attribut objet dans la classe conteneur.Cela se fait de cette manière :
<div id="form:nomForm.Object:nomObject.AttName:nomAtt.ObjectNumber:nObject">

Je pensais construire le template avec le when mais tous mes essais conduisaient soit à l'affichage des deux types de div soit à aucun des deux.

<tr>
   <td><div id="form:[var.nomForm].Object:[att.obj].ObjectNumber:[att.nbObj]">[att;block=tr;headergrp=obj;when [att.attName]=""]</td>
</tr>
<tr>
    <td><div id="form:[var.nomForm].Object:[att.obj].AttName:[att.attName].ObjectNumber:[att.nbObj]">[att;block=tr;headergrp=obj;when [att.attName]!=""]</td>
</tr>

Le tableau fusionné dans le bloc 'att' a son champ attName vide quand l'objet est parent ou avec le nom d'attribut que l'objet prend.

Please Help Me !!!
By: Muf
Date: 2005-07-08
Time: 11:15

Re: [FR] Problème d'affichage conditionnel

Sinon, je ne connaissais pas du tout les moteurs de template mais c'est vrai que cela allège considérablement les opérations de création / maintenance des pages. Donc, bravo !!! :D

Je sais que cela doit être trois fois rien mais je me sers de TBS depuis 3 jours et je n'arrive pas à adapter l'exemple donné...
By: Skrol29
Date: 2005-07-08
Time: 12:07

Re: [FR] Problème d'affichage conditionnel

Salut,

Tu ne peux pas avoir en même temps la paramètre "headergrp" et "when" dans la même définition de bloc. Car une section d'entête et une section conditionelle sont deux types de sections différentes.
Le plus simple est de retirer le paramètre "headergrp".

Un autre truc : les doubles guillemets (") ne sont pas des séparateurs pour les paramètres TBS, il faut utiliser le guillemet simple (').
Exemple :
  [att;block=tr;when [att.attName]='']
By: Muf
Date: 2005-07-08
Time: 12:29

Re: [FR] Problème d'affichage conditionnel

Merci de répondre aussi vite.

Déjà, ça m'a retiré une vingtaine d'erreurs ( undefined index ... ) :-)
Mais sans le headergrp, ma page n'est plus structurée par les <div> ...

Voici un exemple de code pour que tu voie :

<form name="titi" action="class.Liaison.php" method="post">
<div id="form:titi">

    <div id="form:titi.Object:Utilisateur.ObjectNumber:1">
        <fieldset>
        <legend>Caractéristiques de l'utilisateur à créer</legend>
        <br>
        &nbsp;&nbsp;&nbsp;&nbsp;Login : <input type="text" name="login" id="form:titi.Object:Utilisateur.AttName:login.AttNumber:1"><br><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Password : <input type="text" name="password" id="form:titi.Object:Utilisateur.AttName:password.AttNumber:2">
        <br><br>
        </fieldset><br>
        <div id="form:titi.Object:TypeUtilisateur.AttName:utilisateurType.ObjectNumber:2">
            <fieldset>
            <legend>Choix de son type d'utilisateur</legend><br>
            &nbsp;&nbsp;&nbsp;&nbsp;Type utilisateur : <SELECT name="nomTypeUtilisateur" value="" id="form:titi.Object:TypeUtilisateur.AttName:nomTypeUtilisateur.AttNumber:3">
            <OPTION value="" ></OPTION>
            <OPTION value="Administrateur" >Administrateur</OPTION>
            <OPTION value="DEFAULT" >Default</OPTION>
            </SELECT><br><br>
            </fieldset>
        </div>
        <div id="form:titi.EndObject:TypeUtilisateur:2" />
        <br>
        <fieldset>
        <legend>Propriétés de l'utilisateur</legend><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Monsieur ? <input type=checkbox name="civilite" id="form:titi.Object:Utilisateur.AttName:civilite.AttNumber:4" checked><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Nom : <input type="text" name="nom" id="form:titi.Object:Utilisateur.AttName:nom.AttNumber:5"><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Prénom : <input type="text" name="prenom" id="form:titi.Object:Utilisateur.AttName:prenom.AttNumber:6"><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Titre : <input type="text" name="titre" id="form:titi.Object:Utilisateur.AttName:titre.AttNumber:7"><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Email : <input type="text" name="email" id="form:titi.Object:Utilisateur.AttName:email.AttNumber:8"><br>
        &nbsp;&nbsp;&nbsp;&nbsp;Site Web : <input type="text" name="siteWeb" id="form:titi.Object:Utilisateur.AttName:siteWeb.AttNumber:9"><br>
        <br><br>
        </fieldset><br>
    </div>
    <div id="form:titi.EndObject:Utilisateur:1" />
    <br>
    <input type="button" value="Envoyer" onclick="validation(this.form.name)">

</div>
</form>

En fait, je récupère différents objets dans mon fichier php et les div servent à délimiter les différents objets.Je fais donc un headergrp=nbObj pour mettre une div quand l'on change d'idObjet...

N'y aurait-il pas moyen de réaliser la même chose avec des magnet ?
Ou même une concaténation du style :
<div id ="form:[var.nomForm].Object:[att.obj].[if [att.attName]!='';AttName:[att.attName].]ObjectNumber:[att.nbObj]">
By: Skrol29
Date: 2005-07-08
Time: 19:16

Re: [FR] Problème d'affichage conditionnel

Mais c'est quoi l'id de ton objet ?
Tu peux avoir deux id identiques sur deux enregistrements différents ?

Si tu veux encadrer les enregsitrements ayant le même id-objet par des balises <div>, le mieux c'est de regarder du côté du paramètre "parentgrp".

Exemple:
<div>
  [att;block=div;parentgrp=obj]
  <tr>...[att;block=tr;when ...]</tr>
</div>
By: Muf
Date: 2005-07-11
Time: 10:23

Re: [FR] Problème d'affichage conditionnel

En fait, mes objets peuvent avoir 2 types d'id ( au sein du formulaire de saisie ) :
   Dans le cas ou l'objet est un attribut d'un autre objet.
<div id="form:[var.nomForm].Object:[att.obj].AttName:[att.attName].ObjectNumber:[att.nbObj]">

ou

<div id="form:[var.nomForm].Object:[att.obj].ObjectNumber:[att.nbObj]">

Par exemple si un objet User a un attribut Tel de type Telephone, l'id du téléphone à saisir sera :
<div id="form:Toto.Object:Telephone.AttName:Tel.ObjectNumber:2">
Tandis que l'objet User aura pour id :
<div id="form:Toto.Object:User.ObjectNumber:1">

Les formulaires se créent dynamiquement en fonction du type d'objet à saisir ( récupération des champs basiques, des champs objets ).
Je voudrais donc que les id des div soient représentés de cette manière, car la phase descendante ( formulaire / SGBD ) fonctionne de cette façon là.

Le headergrp me sert à grouper les attributs à saisir par objet ( avec aussi un aspect visuel un poil plus sympa ) et je pensais donc insérer une div à chaque nouveau headergrp .
La balise </div> est placée à chaque footergrp.
By: Muf
Date: 2005-07-11
Time: 14:44

Re: [FR] Problème d'affichage conditionnel

En fait, j'ai abandonné l'affichage conditionnel pour des balises magnet en faisant un aimant sur l'attribut attName pour que la division ne s'inscrive que quand cet attribut est défini, donc quand l'objet était un sous-objet.