affichage tableau multidimension

affichage tableau multidimension - HTML/CSS - Programmation

Marsh Posté le 11-01-2006 à 10:56:49    

Bonjour,
 
j'affiche mon tableau multidimension de la façon suivante et je voudrais apporter quelques amélioration à l'affichage.

Code :
  1. function aff_tab($tab){
  2. print "<ul>";
  3. foreach($tab as $cle => $val){
  4.  $nb=count($val);
  5.  if( !is_array($val) ){
  6.   print "<li>$cle \t $val\n<br>";
  7.  }else{
  8.   print "<li>$cle $nb \n<br>";
  9.   aff_tab($val);
  10.  }
  11. }
  12. print "</ul>";
  13. }


 
je voudrais pouvoir afficher toute l'arborescence ou seulement une partie (comme pour les repertoires d'un DD) à l'aide d'un click sur l'élément pour étendre l'affichage d'une sous partie ou la réduire.
Je voudrais aussi afficher le nombre d'enfant qu'il y a au fond du tableau sur les branches de façon recursive.
les enfants corresponde au l'extremités des branches
 
exemple

Code :
  1. A (6 enfants)
  2. --B (2 enfants)
  3. ----a
  4. ----b
  5. --C (3 enfants)
  6. ----c
  7. ----d
  8. ----e
  9. --f (enfants lui meme)
  10. G (2 enfants)
  11. --H (2 enfants)
  12. ----i
  13. ----j


 
avez vous quelques idées sur la façon à procéder.
Merci


Message édité par rdams le 11-01-2006 à 14:27:39
Reply

Marsh Posté le 11-01-2006 à 10:56:49   

Reply

Marsh Posté le 11-01-2006 à 11:50:05    

2/3 trucs:
- qu'on soit bien d'accord quand tu parles de clique, cela sous entend que a chaque clique tu recharges ta page en relançant ton aff_tab avec le bon paramètre?  
- Je comprends pas ton calcul du nombre d'enfants. Pour Moi A à 3 enfants ( B,C,f ), et G un seul ( H). Ou alors tu comptes également les petits enfants mais à ce moment la A en a 8 ( B..f) et G 3 ( H,i,j)
- le code html généré est bancale, il manque les </li>

Reply

Marsh Posté le 11-01-2006 à 12:35:56    

j'ai l'impression qu'il compte les extrémités de chaque branches.
En bref, b,c et h ne sont pas compté vu qu'ils ont eux même des enfants.
 
rdams > Pour ce que tu demandes, soit tu le fais en javascript (attention à bien gardé tout affiché par défaut avec le javascript qui cache ce qu'il faut une fois la page chargé) soit tu le fait en php mais en redemandant toute la page à chaque fois et à ce moment là, il faudra indiquer au script php ce qu'il doit afficher ou ce qu'il en doit pas afficher.

Reply

Marsh Posté le 11-01-2006 à 14:26:31    

oui c'est ça les extremité de chaque branche.
il faudrait que sa fonctionne coté client donc en javascript  
je repost dans la rubrique javascript

Reply

Marsh Posté le 16-01-2006 à 10:23:25    

personne ne peut m'aider?

Reply

Marsh Posté le 16-01-2006 à 11:22:33    

Ben t'as fait quoi pour le moment pour cacher/afficher les différentes zones?

Reply

Marsh Posté le 16-01-2006 à 15:39:56    

justement, je n'ai rien pour le mmoment et je ne connais pas les fonctions interne de javascript permettant de faire ceci.

Reply

Marsh Posté le 17-01-2006 à 09:27:16    

J'ai trouvé ces fonctions en php et javascript me permettant de montrer ou cacher une partie de l'arbre.
 

Code :
  1. //fontion js permettant de montrer ou cacher les branches de l'arbre
  2. <script>
  3. function swap(elem){
  4. leparent = elem.parentNode;
  5. disp = 'none';
  6. if(elem.firstChild.innerHTML == '-'){
  7.  elem.firstChild.innerHTML = "+";
  8.  elem.lastChild.style.display = 'inline';
  9. }else{
  10.  elem.firstChild.innerHTML = "-";
  11.  elem.lastChild.style.display = 'none';
  12.  disp = 'block';
  13. }
  14. for(var i=1;i<leparent.childNodes.length;i++){
  15.  leparent.childNodes[i].style.display = disp;
  16. }
  17. }
  18. window.onload = function(){
  19. liens = document.getElementsByName('lesliens');
  20. for(var i=0;i<liens.length;i++) {
  21.  swap(liens[i]);
  22. }
  23. }
  24. </script>
  25. //fonction php permettant de parcourir le tableau récursivement
  26. <?php
  27. function affiche($tab){
  28. echo "<table border='1' cellpadding='0' cellspacing='0'>";
  29. $col="";
  30. foreach($tab as $key => $value)
  31. {
  32.  if($key!=''){
  33.   echo "<tr><td class='case' width='20'><img src='images/espaceur.gif' border='0' width='20'></td>";
  34.   echo "<td class='case' width='350'><a href='#' class='liens' name='lesliens' onclick='swap(this)'><span>-</span>&nbsp;",$key,"&nbsp;<span class='count'>(",is_array($value) ? count($value) : "1"," )</span></a>";
  35.  }
  36.  if(is_array($value)){
  37.             affiche($value);
  38.   if($key!=''){
  39.    echo "</td>";
  40.   }
  41.         }else{
  42.   echo "<td class='case' width='250'>&nbsp;".$value."</td>";
  43.   echo "</tr>";
  44.  }
  45. }
  46. echo"</table>";
  47. }
  48. ?>
  49. <!-- partie html permettant d'afficher le tableau à l'emplacement voulu et appel de la focntion php -->
  50. <table width="670" cellpadding="0" cellspacing="0" border="0">
  51. ....
  52. <tr><td align="left"><?php affiche($tab_id_entite); ?></td></tr>
  53. ....
  54. </table>


 
Je voudrais aussi afficher le nombre d'enfant qu'il y a au fond du tableau sur les branches (ou noeud) de façon recursive.  
les enfants correspondent aux extremités des branches  
 
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed