Categories > TinyButStrong general (FR) >

key->val sur tableaux imbriqués

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Bewonder
Date: 2006-12-21
Time: 16:57

key->val sur tableaux imbriqués

Bonjour,

J'ai un tableau de structure équivalente à :
$tab[] = array('AAA'=>'texteA',  'BBB'=>'texteB', 'CCC'=>'texteC') ;

Il doit me servir à remplir des listes déroulantes dont le contenu peut être différent à chaque ligne.
Y-a-t'il une solution pour utiliser une syntaxe key->val comme dans un tableau simple ?

Merci.
By: Skrol29
Date: 2006-12-22
Time: 04:02

Re: key->val sur tableaux imbriqués

Salut,

Bien oui, mais il faudrait que tu détailles un peu plus comment tu associes la liste d'item adéquate à chaque ligne.

By: Bewonder
Date: 2006-12-22
Time: 08:03

Re: key->val sur tableaux imbriqués

Oups !! pas évident.

Bon, je dois afficher des lignes correspondant à des structures dont le type et le nombre ont été déterminés dans un formulaire précédent.
J'aurais par exemple deux lignes correspondant à deux types de planchers, une ligne correspondant à un type de mur et une autre correpondant à un type de toiture.
5 lignes en tout dont 2 pour le plancher. Or, comme les types de planchers sont différents, pour chaque ligne, j'aurai une liste de choix de structure et une liste de choix d'isolation différentes.

Concrètement et pour ces deux lignes :
$GLOBALS['SESSION']['projet_nb_pb'] contient le nombre de types de planchers (ici 2)
$GLOBALS['SESSION']['PAROIS_DETAILLEES']['form_paroi_pb1'] et $GLOBALS['SESSION']['PAROIS_DETAILLEES']['form_paroi_pb2'] contiennent les différents identificateurs des planchers
et voici le chargement du tableau :
if ($GLOBALS['SESSION']['projet_nb_pb']>0){
  for ($i=1;$i<=$GLOBALS['SESSION']['projet_nb_pb'];$i++){
    $GLOBALS['planchers_bas'][$i]=$GLOBALS['SESSION']['PAROIS_DETAILLEES']['form_paroi_pb'.$i];
    $GLOBALS['liste_detaillee_structure_pb'][$i]=donne_liste_structure_paroi($db,+paramètres...);
    $GLOBALS['liste_detaillee_isolation_pb'][$i]=donne_liste_isolant_paroi($db,+paramètres...);
  }
}
else $GLOBALS['planchers_bas']=array();
Les fonctions donne_liste_... renvoient les key->val pour la construction des listes déroulantes.

On a donc, dans ce cas précis, un tableau de 2 cases contenant chacune un tableau d'ID->libellé.

La jonction avec l'html
$this->LoadTemplate('nomfichier.htm');
$this->MergeBlock('paroi_struct_pb', $GLOBALS['liste_detaillee_structure_pb']);
$this->MergeBlock('paroi_iso_pb', $GLOBALS['liste_detaillee_isolation_pb']);
$this->MergeBlock('plbas', $GLOBALS['planchers_bas']);
$this->Show();

Pour le fichier html, j'ai essayé plusieurs méthodes mais rien à faire, voici celle qui ne me génère pas d'erreur mais qui m'affiche des listes vides :
<tr class="Style1">
  <td>Plancher bas[plbas.#;block=tr]</td>
  <td align="right">Structure</td>
  <td>
    <select name="form_structure_detaillee_pb[paroi_struct_pb.#]" id="form_structure_detaillee_pb[paroi_struct_pb.#]">
      <option value="[paroi_struct_pb.[paroi_struct_pb.#].key]">[paroi_struct_pb.[paroi_struct_pb.#].val;block=option;when [paroi_struct_pb.[paroi_struct_pb.#].key]!=VALEUR_DEFAUT]</option>
      <option>[paroi_struct_pb.[paroi_struct_pb.#].VALEUR_DEFAUT;ope=html;select]</option>
    </select>
  </td>
  <td align="right">Isolation</td>
  <td>
    <select name="form_isolation_detaillee_pb[paroi_iso_pb.#]" id="form_isolation_detaillee_pb[paroi_iso_pb.#]">
      <option value="[paroi_iso_pb.[paroi_iso_pb.#].key]">[paroi_iso_pb.[paroi_iso_pb.#].val;block=option;when [paroi_iso_pb.[paroi_iso_pb.#].key]!=VALEUR_DEFAUT]</option>
      <option>[paroi_iso_pb.[paroi_iso_pb.#].VALEUR_DEFAUT;ope=html;select]</option>
    </select>
  </td>
</tr>

Si je regarde le code, par exemple pour les structures.
plbas.# passe bien de 1 à 2 mais paroi_struct_pb.# conserve la valeur 2.
Je sais que mon code html est nul mais j'ai essayé d'autres arrangements (par exemple sans le [paroi_struct_pb.#]) que je ne vais pas décrire ici.

Voilà, c'est assez touffu, j'espère avoir été assez limpide.
Merci pour ton implication Skrol.