Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-05-2009 18:57:16

Aliong
Nouveau membre
Date d'inscription: 11-05-2009
Messages: 6

[Résolu] FLEX Zend transfere en xml

bonjour,
j'utilise actuellement les technologies flex et zend pour le dev. d'application spécifiques.
je souhaiterai récupérer des catégories dans ma DB ,
puis les retourner sous forme d'xml pour les gerer dans un tree.

tout se passe bien sauf que mes boucles de construction du xml s'arrête au premier enregistrement parent :

    public function selectCategorie()
    {
        $table = new TCategorie();
        $select = $table->select()->from($table, '*' );
        $liste = $table->fetchAll($select);
       
        $xmlSortie = '<?xml version="1.0" encoding="utf-8"?>';
        foreach ($liste as $ligne)
        {
            if($ligne->parent_id == 0){
                $xmlSortie .= '<node id="'.$ligne->id.'" label="'.$ligne->nom.'">';
                    //on ajoute les enfants
                    foreach ($liste as $ligneEnf)
                    {
                        if($ligneEnf->parent_id == $ligne->id) $xmlSortie .= '<node id="'.$ligneEnf->id.'" label="'.$ligneEnf->nom.'" />';   
                       
                    }
                $xmlSortie .= '</node>';
            }
        }
       
        return $xmlSortie;   
    }

le résultat :

<?xml version="1.0" encoding="utf-8"?>
<node id="1" label="Achat">
    <node id="2" label="Information" />
    <node id="3" label="Interim" />
</node>

et il manque :

<node id="4" label="Direction">
    <node id="5" label="test" />
</node>

par avance merci pour vos réponses !

Dernière modification par Aliong (12-05-2009 15:21:00)

Hors ligne

 

#2 11-05-2009 23:01:00

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Résolu] FLEX Zend transfere en xml

manque des informations : contenu de la base car la on sait pas ou doit aller les nodes 4 et 5.
Ensuite regardes du coté de la récursivité pour gérer le multiniveau ou alors du coté de la représentation intervalaire

Code:

recherches des items sans parents (i.e. parent_id == 0)
pour chacun de ces items
   recherche des items ayant pour parent_id id
   si recherche retourne au moins un resultat 
       ouverture balise node
       parcours des resultats de la 2eme recherche
          ajout du node
       fin parcours
       fermeture balise node
   sinon
       ajout d'un node
   fin si
fin pour

c'est l'idée de base à factoriser

Dernière modification par ndesaleux (11-05-2009 23:06:48)

Hors ligne

 

#3 12-05-2009 00:13:28

Aliong
Nouveau membre
Date d'inscription: 11-05-2009
Messages: 6

Re: [Résolu] FLEX Zend transfere en xml

merci pour ta rapidité de réponse, en effet il y a peu d'élément mais la j'ai rien sous les yeux  donc coté flex de toute facon ça n'a auun impact sur le resultat de cette fonction sinon coté base de donnee c'est une simple table :

CREATE TABLE categorie (
    id    INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    nom                VARCHAR(100),
        parent_id    INTEGER NOT NULL
    );

contenu

id       nom                  parent_id

1       Achat                 0
2       Information        1
3       Interim              1
4       Direction            0
5       test                    4

je crois avoir trouvé mon erreur en écrivant ces lignes de tête, je vérifie demain smile,
si c'est ce que je pense le code n'a rien à voir en faite j'ai pas mis 4 en parent_id de test mais 2 je crois !
je regarde demain et rectifie si c'est le cas excusez moi pour le dérangement !

cordialement,

Hors ligne

 

#4 12-05-2009 10:31:20

Aliong
Nouveau membre
Date d'inscription: 11-05-2009
Messages: 6

Re: [Résolu] FLEX Zend transfere en xml

ndesaleux a écrit:

Code:

recherches des items sans parents (i.e. parent_id == 0)
pour chacun de ces items
   recherche des items ayant pour parent_id id
   si recherche retourne au moins un resultat 
       ouverture balise node
       parcours des resultats de la 2eme recherche
          ajout du node
       fin parcours
       fermeture balise node
   sinon
       ajout d'un node
   fin si
fin pour

re bonjour,
donc j'ai bien regardé j'avais une erreur sur le dernière item qui n'avait pas le bon parent_id, par contre cette fois si tout es ok coté données, et pourtant il me manque toujours le dernier résultat. comme si il n'exécutait pas la première boucle après avoir remplie la première condition .
pour info j'ai bien regardé ce que tu m'as donné comme piste, et c'est exactement ce que je fais dans le code... d'autre piste ?

Dernière modification par Aliong (12-05-2009 10:31:45)

Hors ligne

 

#5 12-05-2009 11:06:10

Aliong
Nouveau membre
Date d'inscription: 11-05-2009
Messages: 6

Re: [Résolu] FLEX Zend transfere en xml

bon j'ai fini par trouver :

Code:

public function selectCategorie()
    {
        $table = new TCategorie();
        $select = $table->select()->from($table, '*' );
        $liste = $table->fetchAll($select);
        
        $xmlSortie = '<?xml version="1.0" encoding="utf-8"?>';

         for ($i=0; $i<count($liste); $i++)
        {
            if($liste[$i]['parent_id'] == 0){
                $xmlSortie .= '<node id="'.$liste[$i]['id'].'" label="'.$liste[$i]['nom'].'">';
                    //on ajoute les enfants
                    for ($j=0; $j < count($liste); $j++)
                    {
                        if($liste[$j]['parent_id'] ==$liste[$i]['id']) {
                            $xmlSortie .= '<node id="'.$liste[$j]['id'].'" label="'.$liste[$j]['nom'].'" />';    
                        }                        
                    }
                $xmlSortie .= '</node>'; 
            }
        }
        
        return $xmlSortie;    
    }

deux foreach imbriqués ne fonctionnent pas il sort de la première boucle après avoir exécuté la seconde. donc deux bonne boucle a l'ancienne et tout fonctionne normalement ... si quelqu'un à une explication je suis preneur . merci

Dernière modification par Aliong (12-05-2009 11:06:40)

Hors ligne

 

#6 12-05-2009 12:06:41

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Résolu] FLEX Zend transfere en xml

Tu avais fait un erreur de conception, i.e. tu parcours la même liste 2 fois en les imbriquant, ce qui fait que lors de ta 2ème boucle, tu finis ta liste donc tu sors de ta première boucle. C'est un fonctionnement tout a fait normal.

Dans ton système, tu parcours des éléments qui n'ont pas à être parcouru.

Tout d'abord, tu devrais récupérer seulement les items n'ayant pas de parent.
pour chacun des items de cette liste
   tu récuperes les enfants de cet item
   pour chaque item tu refais la meme chose et ce tant que tu as des enfants.

donc tu feras plus de requetes mais tes requetes ne retourneront que les items à parcourir, de plus cela te permet de gérer une descendance de niveau X et non 2 comme ce que tu fais actuellement.

je m'auto cite

Ensuite regardes du coté de la récursivité pour gérer le multiniveau ou alors du coté de la représentation intervalaire

Hors ligne

 

#7 12-05-2009 15:19:45

Aliong
Nouveau membre
Date d'inscription: 11-05-2009
Messages: 6

Re: [Résolu] FLEX Zend transfere en xml

tu as tout à fait raison et je vais faire plus simple un fonction qui retour un tableau d'enfant suivant l'parent_id
et depuis flex dans le Tree j'appelle cette fonction quand je sélectionne un item puis j'ajoute le retour en enfant .
merci pour ton aide

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages