Intervalle et rendu html

cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 11 nov. 2011 à 22:40
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013 - 21 nov. 2011 à 11:46
bonjour,

je trouve beaucoup de tuto pour expliquer les intervalles mais personne ne montre comment faire le rendu ce qui me pose aujourd'hui des problèmes.
j'ai une table :
id parent_id lft rght name

je souhaiterai faire une rendu dans une table avec un décalage pour les enfants

ex :

dev
--php
----exemples
----tuto
maison
--liens
--articles
----tuto
j'obtiens bien l'ensembles des resultats dans un array mais comment mettre en forme avec des foreach je suppose ?
merci d'avance.

6 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
14 nov. 2011 à 12:49
Tiens... Je viens de faire un truc du genre...

Tu peux utiliser des listes <li> etc... qui marchent bien.

Sinon, j'ai fait un truc avec des div et du css qui marche pas mal (bien que ça soit techniquement moins propre que les listes) en insérant une marge dans les divs enfants...
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
14 nov. 2011 à 13:45
oui j'ai vu qu'il y en a qui essaie avec du css, mais je trouve que cela complique, perso j'aimerai incrémenter les enfants par des --
ce qui donnerai
rub
--enfant 1
----enfant de enfant 1
--enfant 2
Si t'as un exemple de code qui donnerai ce genre d'effet.
Merci
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
14 nov. 2011 à 14:55
tu peux ruser avec ton css et utiliser un background qui contient tes -. C'est ce que j'ai fait pour représenter une arborescence. Je te refile un bour de code des que j'ai le temps de le dépoluer...
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
15 nov. 2011 à 16:43
Lut,
en ajoutant la notion de level, j'ai réussi à faire quelque chose de potable sans tableau avec des ul, mais le but est de pouvoir incrémenter par des -- et non des ul car dans un tableau la mise en forme saute automatiquement.
Voici déjà ce que j'ai fait :
    <?php foreach($categories as $k=>$v): ?>
    <tr>

        <td>
            
        <?php 
                   if ($levelPrevious < $v['Category']['level']) {
                    echo str_repeat('', $v['Category']['level'] - $levelPrevious);
                    $prevpass = $levelPrevious;
                    $levelPrevious=$v['Category']['level'];
                    
                    echo '--'.$v['Category']['name'].' ('.$prevpass.' < '.$levelPrevious.')
';
             }
            elseif($levelPrevious > $v['Category']['level']){
                    $r .= str_repeat('', ++$levelPrevious - $v['Category']['level']);
                    $prevpass = $levelPrevious;
                    $levelPrevious=$v['Category']['level'];
                    
                    echo '--'.$v['Category']['name'].' ('.$prevpass.' > '.$levelPrevious.')
';
             }
            else{
                    $prevpass = $levelPrevious;
                    echo '--'.$v['Category']['name'].' ('.$prevpass.' < / > '.$levelPrevious.')
';
                    
                    $levelPrevious=$v['Category']['level'];
            }
<?php endforeach; ?>
        ?>

Je dois mettre ces résultats dans un tableau où il y aura une colonne nom, online et actions (supp,modif)

Si tu arrives à mettre un css particulier peut être que j'ai moyen de m'en servir donc j'attends ;-)
Par contre mon but serait de ne pas me servir des level sauf si vraiment obligatoire ;-)
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
camillagaiaschicherie Messages postés 58 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 février 2012
19 nov. 2011 à 12:44
bonjour

je ne sais pas si c est cela mais bon :

<style type="text/css">
ul {
margin:0;
padding:0;
}
li {
list-style:disc;
margin-left:20px;
}
li a {
float:right;
padding:0 5px;
}
</style>

<?php

$sql="SELECT * FROM table";
$res=mysql_query($sql);
while($data=mysql_fetch_array($res)){
$rec[]=$data;
}

function generate_tree_list($arr, $parent = 0){
$has_children = false;
  	foreach($arr as $key => $value){
    	if ($value['parent_id'] == $parent){
      		if ($has_children == false){
        		$has_children = true;
        		echo '';
      		}
      		echo '<li>' . $value['name'];
      		echo '[# Delete]';
echo '[# Edit]';
echo '[# On/Off]';
  		unset($arr[$key]);
  		generate_tree_list($arr, $value['id']);
      		echo '</li>';
    	}
  	}
  	if ($has_children === true) echo '';
}

function generate_tree_table($arr, $parent 0,$level 0){
$has_children = false;
  	foreach($arr as $key => $value){
    	if ($value['parent_id'] == $parent){
      		if ($has_children == false){
        		$has_children = true;
        		$level++;
      		}
      		echo '<tr>';
echo '<td style="padding-left:'.(20*($level)).'px;">'. $value['name'].'</td>';
      		echo '<td>[# On/Off]</td>';
echo '<td>[# Edit]</td>';
echo '<td>[# Delete]</td>';
echo '</tr>';
  		unset($arr[$key]);
  		generate_tree_table($arr, $value['id'],$level);
    	}
  	}
}

echo '
';
echo generate_tree_list($rec);
echo '
';

echo '';
echo generate_tree_table($rec);
echo '
';

?>
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
21 nov. 2011 à 11:46
bon, un truc à l'arrache, uniquement en php

<?php 

$a = array(
array("parent1",array(
array("enfant1",array()),
array("enfant2", array(
array("enfant21",array())
)),
array("enfant3",array())
)),
array("parent2", array())
);

function afficheHierarchie($array){
static $level = -1;

$level ++;
foreach($array as $element){
for($i=0;$i<$level;$i++)
echo "--";
echo $element[0] . "
";
afficheHierarchie($element[1]);
}
$level--;

}

afficheHierarchie($a);

?>


Pour incrémenter uniquement avec des --.

Après ça vaut ce que ça vaut hein.
0