Categories > TinyButStrong general (FR) >

Colonnes dynamiques

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Macbee
Date: 2006-07-03
Time: 19:46

Colonnes dynamiques

Bonjour,

J'aimerais réaliser un tableau à deux dimensions le tout dynamique comme l'exemple 'Colonnes dynamiques'. Mais au lieu d'avoir dans chaque case le produit de la colonne par le rang, je souhaiterais placé des champs textes.

Un peu d'explication :
Code PHP en reprenant l'exemple :
// Liste des noms de colonne
$columns = array();
for ($col=1;$col<=$nbr_col;$col++) {
    $columns[$col] = 'column_'.$col;
}

// Création des données
$data = array();
for ($row=1;$row<=$nbr_row;$row++) {
    $record = array();
    for ($col=1;$col<=$nbr_col;$col++) {
        $record[$columns[$col]]['nom'] = 'nom_'.$col;
        $record[$columns[$col]]['prenom'] = 'prenom_'.$col;
    }
    $data[$row] = $record;
}

Le code HTML (tj à partir de l'exemple) :
<table border="1" align="center" cellpadding="0" cellspacing="0">
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FF9966"><div align="center">X</div></td>
          <td width="30" bgcolor="#FFD8B0"><div align="center" class="title-section">
              <div align="center">[c0.key;block=td] </div>
            </div></td>
        </tr>
        <tr bgcolor="#F0F0F0">
          <td bgcolor="#FFD8B0" class="title-section"><div align="center">[r.$;block=tr]</div></td>
          <td bgcolor="#DBDBDB"><div align="center">[r.[c1.val;block=td]] </div></td>
        </tr>
        <tr bgcolor="#F0F0F0">
          <td bgcolor="#FFD8B0" class="title-section"><div align="center">[r.$;block=tr]</div></td>
          <td bgcolor="#FFFFFF"><div align="center">[r.[c2.nom;block=td]] - [r.[c2.prenom;block=td]] </div></td>
        </tr>
      </table>
me génére des erreurs (variables non existantes).

Quelle serait la solution pour faire afficher le nom et le prenom dans chaque case ?
By: Macbee
Date: 2006-07-03
Time: 22:51

Re: Colonnes dynamiques

J'ai une autre question sur ce même code :
Est-on obligé de mettre [c0.key;block=td] ?
Que ce passe-t-il si l'on supprime le code suivant :
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FF9966"><div align="center">X</div></td>
          <td width="30" bgcolor="#FFD8B0"><div align="center" class="title-section">
              <div align="center">[c0.key;block=td] </div>
            </div></td>
        </tr>
soit la première ligne du tableau ?
By: Skrol29
Date: 2006-07-04
Time: 11:18

Re: Colonnes dynamiques

Salut,

Le bloc "c2" n'a pas de champ "nom" et "prenom". Donc ça ne peut pas marcher.
Je pense qu'il suffit de mettre dans chaque celulle centrale :
[r.[c1.val;block=td].prenom] - [r.[c1.val;block=td].nom]
By: Skrol29
Date: 2006-07-04
Time: 11:20

Re: Colonnes dynamiques

> Est-on obligé de mettre [c0.key;block=td] ?

Cette ligne sert uniquement à afficher une ligne d'entête.
Tu peux la supprimer. Mais il faudra aussi enlever "c0" de la liste des blocs fusionnés avec MergeBlock().
By: Macbee
Date: 2006-07-04
Time: 11:47

Re: Colonnes dynamiques

J'avais déjà essayer cette solution. J'obtiens les messages suivants :
TinyButStrong Error in field [r.Array.prenom...] : item 'Array' is not an existing key in the array...
TinyButStrong Error in field [r.column_10.nom...] : item before 'nom' is neither an object nor an array. Its type is integer...

Voici le code en question :
// Création des données
$data = array();
for ($row=1;$row<=$nbr_row;$row++) {
    $record = array();
    for ($col=1;$col<=$nbr_col;$col++) {
        $record[$columns[$col]] = $row * $col;
    $record[$columns[$col]]['nom'] = "nom_".$col;
    $record[$columns[$col]]['prenom'] = "prenom_".$col;
    }
    $data[$row] = $record;
}
Comme tu peux le constater je n'ai rien changé au code donné dans l'exemple. J'ai uniquement rajouté 2 lignes comme cité précédemment
que l'on retrouve dans le html :
<table border="1" align="center" cellpadding="0" cellspacing="0">
        <tr bgcolor="#F0F0F0">
          <td width="30" bgcolor="#FF9966"><div align="center">X</div></td>
          <td width="30" bgcolor="#FFD8B0"><div align="center" class="title-section">
              <div align="center">[c0.key;block=td] </div>
            </div></td>
        </tr>
        <tr bgcolor="#F0F0F0">
          <td bgcolor="#FFD8B0" class="title-section"><div align="center">[r.$;block=tr]</div></td>
          <td bgcolor="#DBDBDB"><div align="center">[r.[c1.val;block=td]] </div></td>
        </tr>
        <tr bgcolor="#F0F0F0">
          <td bgcolor="#FFD8B0" class="title-section"><div align="center">[r.$;block=tr]</div></td>
          <td bgcolor="#FFFFFF"><div align="center">[r.[c2.val;block=td].nom] - [r.[c2;block=td].prenom] </div></td>
        </tr>
      </table>

Les premières lignes s'affichent correctement. Les deuxièmes lignes générent les erreurs.

Merci de vos aides
By: Macbee
Date: 2006-07-04
Time: 14:13

Re: Colonnes dynamiques

J'ai trouvé mon erreur :

// Création des données
$data = array();
for ($row=1;$row<=$nbr_row;$row++) {
    $record = array();
    for ($col=1;$col<=$nbr_col;$col++) {
        $record[$columns[$col]]['val'] = $row * $col;
$record[$columns[$col]]['nom'] = "nom_".$col;
$record[$columns[$col]]['prenom'] = "prenom_".$col;
    }
    $data[$row] = $record;
}
Je dois remplacer $record[$columns[$col]]= $row * $col; par $record[$columns[$col]]['val'] = $row * $col; pour garder une structure homogène de mon tableau.

Encore merci ;)