Categories > TinyButStrong general (FR) >

Re: Problème tableau multidimensionnel

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Yosh
Date: 2010-05-06
Time: 12:25

Re: Problème tableau multidimensionnel

Bonjour.

Je me permet de poster a la suite de ce message car mon problème est similaire.
Je dois "Afficher" un tableau de cette forme :

array (
  'A1-09-10' =>
  array (
    'UE1' =>
    array (
      'Algorithmique et Programmation' =>
      array (
        'Cours' => 52,
        'totalHeure' => 188,
        'TD' => 76,
        'TP' => 60,
      ),
         'PPP' =>
      array (
        'Cours' => 5,
        'totalHeure' => 29,
        'TD' => 24,
      ),
    ),
    'UE2' =>
    array (
      'Economie et Gestion des Organisations' =>
      array (
        'Cours' => 37,
        'totalHeure' => 153,
        'TD' => 104,
        'TP' => 12,
      ),
       'Mathématiques' =>
      array (
        'Cours' => 16,
        'totalHeure' => 148,
        'TD' => 120,
        'TP' => 12,
      ),
    ),
  ),
  'A2-09-10' =>
...

Je veux donc faire un tableau qui regroupe pour chaque année puis chaque
Unité d'enseignement (UE) puis chaque matière puis chaque Sequence (TD/cours..) le nombre d'heure.
Après avoir passé pas mal de temps a faire des essais foireux;
J'ai fais cela :
   
    $tbs=new clsTinyButStrong();
    $tbs->loadTemplate("themes/defaut/tableauRecapitulatifHeuresEtudiant.htm");
    $tbs->MergeBlock('data',$_Recap);
    $tbs->MergeBlock('sub','array','_Recap[%p1%]');
 
<table>
<tr>
   <td>test1</td>
   <td>test2</td>
   <td>test3</td>
</tr>
<tr>
   <td>[data.#][data.$]</td>
   <td>[sub.$;block=tr;p1=[data.$;block=tr]]</td>
</tr>
</table>

J'obtiens donc La listé de mes années et de mes UE. Néamoins je n'arrive pas
a comprendre comment descendre plus bas (dans le tableau je veux dire).

Je me permet donc de demander de l'aide parce que ça fais 3 jours que je
suis dessus et je pense donc que la logique m'échappe complètement.
By: Skrol29
Date: 2010-05-06
Time: 14:04

Problème tableau multidimensionnel

je déplace le sujet dans un nouveau fil pour que ce soit plus simple à suivre
By: Skrol29
Date: 2010-05-06
Time: 14:08

Re: Problème tableau multidimensionnel

Salut Yosh,

Peux-tu donner une illustration du résultat final que tu attends ?
By: Yosh
Date: 2010-05-06
Time: 16:13

Re: Problème tableau multidimensionnel

Bien sur. :)

               |      Promo : A1-09-10|
               |_____________________|____________________________________
               |UE1                          |         UE2
               |_____________________|_____________________________________________
               |Algo  | PPP  |...          |   Maths |...
__________|_____________________|___________________________________
TD           |  12    | 11   |...         |   1      |...
__________|______|_____|________|____________________________________
TP            | 20    | 5     | ...        |   10      |...
__________|______|_____|________|___________________________________
Cours       |   5    |   10 |   ...      |   10      |...
__________|______|_____|________|_______________________________
totalHeure |  37   | 26   | ...        | 21        |...

Voila un ordre d'idée rapide.
Cela dit, mon problème est surtout que je n'arrive pas a accéder aux données.
Je n'en suis même pas encore au problème d'affichage. ^^'
By: Skrol29
Date: 2010-05-07
Time: 10:43

Re: Problème tableau multidimensionnel

Salut Yosh,

Le tableau de données n'a pas une structure pratique pour faire un affichage complet. Au lieu d'avoir la liste des "matières" de façon brute comme dans un catalogue, il les donne de façon hiérarchique. Ce qui oblige tout algo d'affichage de balayer complètement l'arbre pour trouver et afficher les éléments enfants que sont les "matières".

Je vois 2 méthodes pour t'en sortir :
1) Tu remets ton tableau à plat de sorte d'avoir les données sous forme d'une liste d'enregistrements.
soit :
2) Tu fais un affichage par sous-bloc, où chaque sous-bloc correspond à un niveau hiérarchique de tes données. C'est à dire : Promo , UE , Matière. C'est la solution plus élégante mais probablement la plus couteuse en perf. Si tu n'as pas un trop gros volume de données à afficher, ça devrait aller.

Une fois que tu as choisi ta méthode, tu va être confronté à l'affichage avec colonne dynamique. Car avec ta représentation, les niveaux Promo et UE sont des colonnes dynamiques. Cela plombe un peu les perf mais pas des tonnes, par contre il faut construire un tableau PHP un peu alambique, comme dans l'exemple de colonne dynamique que l'on trouve dans les exemples en ligne.

Voilà, dis moi ci cela t'as aidé à te décoincer du problème.
By: Yosh
Date: 2010-05-07
Time: 16:30

Re: Problème tableau multidimensionnel

Ta réponse ne m'a pas trop aider non.
Cela dit, j'ai réussis à décoincer le problème. Et en fait je pense que ce que j'ai fais correspond a ce que t'explique (enfin je crois ~~).

La solution n'est pour le moment pas parfaite mais je la poste quand même au cas ou d'autres personnes aient un jour le même soucis.
    $tbs=new clsTinyButStrong();
    $tbs->loadTemplate("themes/defaut/tableauRecapitulatifHeuresEtudiant.htm");
    $tbs->MergeBlock("promotion","array","_Recap");
    $tbs->MergeBlock("ue","array","_Recap[%p1%]");
    $tbs->MergeBlock("matiere","array","_Recap[%p1%][%p2%]");

<table>
  <caption>RECAP HEURE ETU</caption>
  <tr>
    <th>PROMOTION</th>
    <th>UE</th>
    <th>MATIERES</th>
    <th>COURS</th>
    <th>TD</th>
    <th>TP</th>
    <th>TOTAL</th>
  </tr>
  [promotion;block=table]
  <tr>
    <td>[promotion.$]</td>
    <td colspan="6">&nbsp;</td>
  </tr>
  [ue;block=begin;p1=[promotion.$]]
  <tr>
    <td>&nbsp;</td>
    <td>[ue.$]</td>
    <td colspan="5">&nbsp</td>
   </tr>
  [matiere;block=begin;p1=[promotion.$];p2=[ue.$]]
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>[matiere.$]</td>   
    <td>[matiere.Cours]</td>
    <td>[matiere.TD]</td>
    <td>[matiere.TP]</td>
    <td>[matiere.totalHeure]</td>
  </tr>
  [matiere;block=end]
  [ue;block=end]
</table>
En gros il s'agit de faire suffisamment de pX (X étant un chiffre) pour voyager dans toute l'arborescence (en gros parce que je comprend toujours pas comment fonctionne TBS en fait. Mais bon : "stage must go on" donc je chercherais a comprendre plus tard.)

Dans tous les cas, problème resolu.
Merci de m'avoir accorder du temps.
Bonne journée.