Bonsoir a tous,
je vous solicite car là je suis bloqué devant ma page blanche et je n'ai pas d'idée d'approche.

Imaginon une table de BD où sont stocké des avions.
nous avons:

  • un id
  • une image
  • un nom
  • et le parent direct de l'avion

Par exemple le MH6 est le parent du B206, de l'EC135 et du UH-B.

Les soucis que j'ai sont les suivants:

  • j'ai beau tourner, mettre en cascade des foreachs, faire des rappel, utilser des tableaux html ou joueur avec le bootstrap..., je ne trouve pas de solution organiser une page comme sur l'image. Pour me moment je cherche juste commence positioner sur une grille les image correctement, mais rien que ça...

Comment approcheriez vous la chose.

Merci d'avance pour vos conseil.

Flo

10 réponses


Grafikart
Réponse acceptée

Pour la base de donnée je te conseille la représentation intervallaire.
Sinon il faut utiliser une fonction récursive. Tu pourrais joindre un dump de ta base de donnée, ton problème est typique de la récursion et je pense que faire un tuto sur ton problème en particulier peut être intéréssant

Essaye d'être plus précis. Tu veux organiser tes éléments comme sur l'image et tu ne vois pas comment tout positionner sur ta page c'est ça ?

flo3376
Auteur

mes infos serai statique, pas de soucis avec des div en absolute et relative je me démerderai, mais elles vont bougers, donc je souhaiterai faire un php qui sache dessiner la chose de lui même, donc dans un premier la grille, pas les trait

Il te faut déjà récupérer le nombre max d'enfants de ton tableau, et en fonction de ça tu peux générer autant de colonnes qu'il y a d'enfants. Une fois ceci fait, tu identifies le nombre de parent d'un élément pour en déduire dans quelle colonne celui-ci doit se placer puis tu gères ton affichage via ton CSS comme tu l'entends :)

Par exemple sur ton image tu as 5 enfants, donc ta page contiendra 5 colonnes. Puis tu ranges chaque avion/hélico dans la colonne correspondante (ex. B-206, EC-135 & UH-IB iront dans la seconde colonne, EH-101 ira dans la 3eme ou 4eme colonne (à toi de voir) etc

Tu me suis ? Perso j'aurais fait comme ça :)

Sinon l'autre solution est de passer par une matrice mais pour ça il faut faire des maths et là je sèche :D !

Tu peux essayer des Div imbriquées : chaque div enfant a un décalage à droite par rapport à son parent.
j'ai refait un exporateur de fichiers sur ce principe, avec possibilié de déplier ou replier l'arborescence.

J'avais également pensé à la représentation intervallaire (tirée de votre tuto @Grafikart).

flo3376
Auteur

Tu pourrais joindre un dump de ta base de donnée

dés que je rentre je dump la BD sur la partie concerné, je l'envoie par mail ou je laisse un lien?

en tous cas merci à vous

Bonjour.

je l'envoie par mail ou je laisse un lien?

Non, pas par email puisque c'est pour le présenter dans ton sujet.
Grafikart ne te le demandait pas personnellement. :)

flo3376
Auteur
CREATE TABLE IF NOT EXISTS `tks_aircraft_2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `fullname` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `registration` varchar(30) CHARACTER SET utf8 NOT NULL,
  `image_type_1` text CHARACTER SET utf8 NOT NULL,
  `dependent` int(3) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=122 ;

--
-- Contenu de la table `tks_aircraft_2`
--

INSERT INTO `tks_aircraft_2` (`id`, `name`, `fullname`, `registration`, `image_type_1`, `dependent`) VALUES
(66, 'EC135', 'Eurocopter E-135', 'EC-135-1', './site/membres/images/avions_mil/ec135.jpg', 78),
(68, 'EH-101', 'AgustaWestland EH101 Merlin', 'EH-101-1', './site/membre/images/avion_mil/eh101.jpg', 91),
(77, 'MH-53J', 'MH-52J PAVE LOW III', 'MH-53-1', './site/membres/images/avion_mil/mh53.jpg', 68),
(78, 'MH-6', 'MH-6 LITTLE BIRD', 'MH-6-1', './site/membres/images/avion_mil/mh6.jpg', 78),
(88, 'UH-1H', 'Bell UH-1H Iroquois-Huey', 'UH-1-1', './site/membres/images/avion_mil/uh1.jpg', 78),
(91, 'B206B', 'Bell 206B', 'B-206-B', './site/membre/images/avion_mil/Bell206.jpg', 78),
(92, 'AH-64', 'Boeing AH-64 Apache', 'AH-64-1', './site/membre/images/avion_mil/ah-64.jpg', 108),
(95, 'CH-47D', 'Boeing CH-47 Chinook', 'CH-47D', './site/membre/images/avion_mil/ch47d.jpg', 68),
(100, 'MI-24', 'Mil Mi-24', 'ND', './site/membre/images/avion_mil/MI-24.jpg', 109),
(108, 'UH-60', 'Sikorsky UH-60 Black Hawk', 'UH-60', './site/membre/images/avion_mil/UH-60.jpg', 88),
(109, 'RAH-66', 'Boeing-Sikorsky RAH-66 Comanche', 'RAH-66', './site/membre/images/avion_mil/RAH-66.jpg', 108);

j'ai virer des colonnes qui ne servent à rien

flo3376
Auteur

alors pour les fonctions récursive, ok pas trop de soucis, mais j'ai essayé de coupler avec la représentation intervalaire, et ... ça m'a gonflé.
Vue que dans mon cas ce n'est pas trés justifié de l'utiliser.

function recursive_enfant($parent=NULL,$type=NULL,$db_tks=NULL,$niveau=0)
        {
            if ($parent==NULL or $type==NULL or $db_tks==NULL) {return;}
            else
            {   $c=0;

                $enfant=$db_tks->query_list("SELECT * FROM ".PREFIX_TKS."_aircraft WHERE `parent` = '".$parent."' and `type`='".$type."'");
                if  ($enfant!=NULL)
                    {$c++;
                        $niveau++;
                        foreach ($enfant as $key => $value)
                            {   
                                if($value->parent==$parent)
                                    {
                                        for ($i=0; $i <$niveau; $i++)
                                        { 
                                            echo "-";
                                        }
                                        echo $value->fullname."<br>";
                                        recursive_enfant($value->id_aircraft,$type,$db_tks,$niveau);
                                    }
                            }
                    }
                return ;

            }

        }
$zero=$db_tks->query_list("SELECT * FROM ".PREFIX_TKS."_aircraft WHERE `parent` = '0' and `type`='".$type."'");
            if ($zero!=NULL)
            {
                foreach ($zero as $key => $value)
                {
                    $value->id_aircraft.":".$value->fullname."<br>";
                    recursive_enfant($value->id_aircraft,$type,$db_tks,0);

                }
            }