Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2852 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Fonction récursive et méthodologie sur fonctionnement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction récursive et méthodologie sur fonctionnement

n°1754441
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 10:37:26  profilanswer
 

Bonjour amis développeur.
 
Je suis entrain de créer un petit module pour le portail applicatif de la société ou je travail. Sur le module de la gestio des intervenants.
J'ai rajouter des informations concernant les qualifications de ces derniers. Pour cela 2 tables. 1 table qualifications avec en autre les champs  
qualification_id
agence_id
qualification_parent_id
qualification_nom
 
et une table intervtoqualif (jointure entre l'intervenant et une qualification) avec les champs suivant
inttoqua_id
inttotqua_intervenant_id
inttoqua_qualification_id
 
de ce fait un intervenant peut avoir 1 ou plusieur qualification.
 
le champs parent_id permet de gerer les qualification par groupe genre voici une arborecence tel que l'on peut l'avoir
 
Jardinage(id1)
--tonte(id2)
--taille(id3)
----fruitier(id4)
----rosier(id5)
----arbuste(id6)
--élagage(id7)
 
de ce fait tonte, taille et élagage auront un parent_id égale à 1 (jardinage) et fruitier , rosier, arbuste
 
Jusque la tout va bien. J'ai donc créer une fonction récursive en php pour m'organiser tel une arborescence de fichier (groupe, sous groupe, sous sous groupe et ainsi de suite) mes qualification avec un checkbox a coté pour le choix.
 
tout sa sa fonctionne bien.
 
Maintenant ce que je veux c'est si je coche une qualification enfante, alors toute les qualification parent jusqu'a la racine de l'arborescence se coche, donc forcement la on part en javascript, et je suppose qu'il faudra que je fasse une fonction recursive en js pour ca. Mais je seche un peu sur le fonctionnement  
 
le code html ressemble un peu a ca  
 

Code :
  1. <input type="checkbox" name="cbx_qualif_1" id="cbx_qualif_1">
  2.     <input type="hidden" name="hidQualif_1" id="hidQualif_1" value="0">
  3.     Jardinage<br />
  4. &nbsp;&nbsp;&nbsp;<input type="checkbox" name="cbx_qualif_2" id="cbx_qualif_2">
  5.     <input type="hidden" name="hidQualif_2" id="hidQualif_2" value="1">
  6.     Tonte<br />
  7. &nbsp;&nbsp;&nbsp;<input type="checkbox" name="cbx_qualif_3" id="cbx_qualif_3">
  8.     <input type="hidden" name="hidQualif_3" id="hidQualif_3" value="1">
  9.     Taille<br />
  10. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="cbx_qualif_6" id="cbx_qualif_6">
  11.     <input type="hidden" name="hidQualif_6" id="hidQualif_6" value="3">
  12.     Fruitier<br />
  13. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="cbx_qualif_12" id="cbx_qualif_12">
  14.    <input type="hidden" name="hidQualif_12" id="hidQualif_12" value="3">
  15.    Rosier<br />
  16. &nbsp;&nbsp;&nbsp;<input type="checkbox" name="cbx_qualif_4" id="cbx_qualif_4">
  17.    <input type="hidden" name="hidQualif_4" id="hidQualif_4" value="1">
  18.    Elagage<br />


 
Les "&nbsp;" c'est pour le respect de l'arborescence, pour le visuel quoi, tout se fait automatiquement via ma function recursive en php.
Les input type hidden sont la pour recuperer justement l'id_parent pour chaque element. L'id du input checkbox contien l'id de la qualification
de ce fait j'aurais tout les élément en ma pocession id de la qualification ainsi que l'id du parent.
 
Mais j'ai du mal a me projeter et voir comment faire en JS maintenant  
 
une petite idée ? j'espere avoir ete clair dans mes explication, j'ai toujours tendance a m'expliquer comme un pied ^^
 
merci

mood
Publicité
Posté le 02-07-2008 à 10:37:26  profilanswer
 

n°1754459
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-07-2008 à 11:00:47  profilanswer
 

tu te servirais d'ul/li pour faire ton "identation" tout sera plus simple car il te suffirait de remonter de parentNode en parentNode...
 
Mais là, AMA, ça va pas être facile.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1754463
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 11:05:56  profilanswer
 

j'ai deja fait ceci

 
Code :
  1. function checkedParentQualif(qualif_id){
  2.        var idParent;
  3.        if(document.getElementById('cbx_qualif_'+qualif_if)){
  4.            idParent = document.getElementById('hidQualif_'+qualif_id).value;
  5.            // on check le checkbox parent
  6.            document.getElementById('cbx_qualif_'+idParent).checked="checked";
  7.         }
  8.         // on rapell la fonction (pour la recursive)
  9.         checkedParentQualif(idParent);
  10.    }
 

Et sa marche bien sa me check bien les parent

 

cela dit maintenant il faut que je fasse l'inverse :s je sais je suis chiant lol
si je decoche un parent que tout les enfant associé se décoche :s la pas simple


Message édité par hyptnos le 02-07-2008 à 11:06:53
n°1754514
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 12:23:57  profilanswer
 

Bon je galere pas mal
 
 
voici l'ensemble de mes 3 fonction
La premiere est appeler sur l'action d'un checkbox et vérifie si coché ou pas et appel une autre fonction en fonction de l'etat.
pour coché les enfant si on coche le parent sa c'est ok comme expliqué ci dessus
Par contre si je decoche un parent je veux decoché tout les enfant
j'arrive pas a faire ma recursivité sur la derniere fonction (voir commentaire)
     // Existe-t-il un input dont la value est idQualif?
     // Oui => on rappelle la fonction notCheckedChildQualif(idQualif)
         
     
     // Non, on ne fait rien et laisse se derouler la boucle for
 

Code :
  1. function verifChecked(qualif_id){
  2. if(document.getElementById('cbx_qualif_'+qualif_id).checked == true){
  3.  checkedParentQualif(qualif_id)
  4. }
  5. else{
  6.  notCheckedChildQualif(qualif_id)
  7. }
  8. }
  9. function checkedParentQualif(qualif_id){
  10.  var idParent
  11.  // on teste l'existence du checkbox
  12.  if(document.getElementById('cbx_qualif_'+qualif_id)){
  13.     // On récupère la valeur du Input Hidden associé
  14.     idParent = document.getElementById('hidQualif_'+qualif_id).value;
  15.     //On check le parent
  16.     document.getElementById('cbx_qualif_'+idParent).checked = "checked";
  17.  }
  18.  checkedParentQualif(idParent);
  19. }
  20. function notCheckedChildQualif(qualif_id){
  21. var i;
  22. var tabCbx = document.getElementsByTagName("input" );
  23. var n = tabCbx.length;   // Nombre de input dans la page (afin d'avoir une limite d'arret a la boucle)
  24. for(i=0; i<=n; i++){
  25.  // on ne traite que les input de type Checkbox
  26.  if(tabCbx[i].type.toLowerCase()=="checkbox" ){
  27.   // On récupère l'id de la qualification
  28.   idQualif = tabCbx[i].id.substring(11,tabCbx[i].id.length);
  29.   if(idQualif != 0){
  30.    // On récupère l'id parent associé  
  31.    idParentAsso = document.getElementById('hidQualif_'+idQualif).value;
  32.    // Si parent id est égale qualif_id du paramètre de la fonction alors on decheck le cbx
  33.    if(idParentAsso == qualif_id){
  34.     alert('qualification = '+idQualif+' coché ? : '+document.getElementById('cbx_qualif_'+idQualif).checked);
  35.     document.getElementById('cbx_qualif_'+idQualif).checked = false;
  36.     // Existe-t-il un input dont la value est idQualif?
  37.     // Oui => on rappelle la fonction notCheckedChildQualif(idQualif)
  38.      
  39.     // Non, on ne fait rien et laisse se derouler la boucle for
  40.    }
  41.   }
  42.  }
  43. }
  44. }


Message édité par hyptnos le 02-07-2008 à 12:25:45
n°1754516
gatsu35
Blablaté par Harko
Posté le 02-07-2008 à 12:28:36  profilanswer
 

on t'a dit de foutre une putain de liste en UL LI :o et ca sera largement plus facile derrière :o :o :oi

n°1754521
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 12:38:20  profilanswer
 

je ne suis pas le boss, je dois donc continuer sur cette perspective :s
 
mais en gros la il faudrait juste que j'arrive a savoir si dans la page il y a un input type hidden qui a pour valeur l'id Parent
et si oui je relance la fonction (donc recursive) avec l'id parent en valeur
 
mais j'arrive pas a vérifier cette presence
et avec ca normalement sa devrait fonctionner

n°1754532
gatsu35
Blablaté par Harko
Posté le 02-07-2008 à 13:18:21  profilanswer
 

ben tu dis au gars qui a généré cette merde :  
 
- si tu me modifie ça de cette manière, je divise par 3 le temps de dev

n°1754536
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 13:26:41  profilanswer
 

le gars qui a créer cette "merde" comme tu dis c'est moi lol, mais parce que l'on me la demander de cette maniere (pas de liste html)
 
mais je vais essayé une autre méthode mais pour sa faut que j'arrive a créer une chaine issus d'un tableau (php) mais la pareille je coince, j'ai poster dans la catégorie php
mais une fois la chaine créer sa ira vite, la chaine me permettra d'organisé chaque élement 1 parent et ses enfant

n°1754543
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-07-2008 à 13:34:10  profilanswer
 

hyptnos a écrit :

le gars qui a créer cette "merde" comme tu dis c'est moi lol, mais parce que l'on me la demander de cette maniere (pas de liste html)


J'adorerais connaître l'argument derrière cette contrainte.  
Avec un petit coup de css, je te sors exactement la même présentation que ta bouse via des listes.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1754545
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 13:37:21  profilanswer
 

Bas le truc c'est que cela refait une grosse refonte du code pour arrive a avoir les liste puisque l'arborescence est créer dynamiquement via une fonction recursive php
donc deja cela devra dire qu'il faut refaire cette fonction pour avoir un affichage avec des UL et des LI.
 
Et ensuite gerer tout cela
 
deja hier l'idée etait de faire la meme chose mais dans un select multiple
aujourd'hui avec des checkbox. :S

mood
Publicité
Posté le 02-07-2008 à 13:37:21  profilanswer
 

n°1754563
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-07-2008 à 14:00:50  profilanswer
 

hyptnos a écrit :

Bas le truc c'est que cela refait une grosse refonte du code pour arrive a avoir les liste puisque l'arborescence est créer dynamiquement via une fonction recursive php
donc deja cela devra dire qu'il faut refaire cette fonction pour avoir un affichage avec des UL et des LI.


Tu noteras bien qu'une telle fonction prend approximativement 10 lignes à écrire :/
exemple ( dégueu avec du print html à l'intérieur mais c'est pour l'exemple):

Code :
  1. $tab = array( 'A', 'B', array('B1', 'B2', 'B3'), 'C', array('C1', array('C11', 'C12'), 'C2', 'C3'));
  2. convertToHtml($tab);
  3.  
  4. function convertToHtml( $p ){
  5.  if ( is_string($p) ){
  6.    echo "<li>",$p,"</li>\n";
  7.  } else if ( is_array($p) ){
  8.    echo "<ul>\n";
  9.    array_map("convertToHtml", $p);
  10.    echo "</ul>\n";
  11.  }
  12. }



Message édité par anapajari le 02-07-2008 à 14:01:13

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1754564
hyptnos
GT : Gui iom
Posté le 02-07-2008 à 14:06:09  profilanswer
 

Oui mais voila le probleme mon tableau de depart n'est pas du tout dans le meme type non plus mais comme je l'ai mis dans la partie php

n°1754566
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-07-2008 à 14:17:20  profilanswer
 

tain mais t'arrêtes de faire ton gay et au choix, tu adaptes l'exemple pour qu'il prenne ton type de tableau en entrée ou tu modifies ton tableau.


---------------
Software and cathedrals are much the same - first we build them, then we pray.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Fonction récursive et méthodologie sur fonctionnement

 

Sujets relatifs
appeler une fonction PHP dans une balise HTML[RESOLU] Utilisation de la fonction WSAAddressToString()
Question sur le fonctionnement schéma xsd[VBA] Existe-t'il une fonction capable de trier un tableau?
[Résolu] - [Php] - Fonction Isset[AJAX] Fonctionnement synchrone et envoi type POST sous IE
quelle fonction utiliser?(finalement pas résolu) Fonction de listage
mise a jour feuille avec excel des calcul d'une fonction[Résolu] Zone de Texte d'un Etats = fonction vba
Plus de sujets relatifs à : Fonction récursive et méthodologie sur fonctionnement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR