IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ORM PHP Discussion :

NestedSet : comment le parcourir ?


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut NestedSet : comment le parcourir ?


    Tentant de mettre des breadcrumbs dans mon application, je me suis tourné vers ce plug-in : isicsBreadcrumbs http://www.symfony-project.org/plugi...adcrumbsPlugin. Tout va pour le meilleur du monde... jusqu'à ce que je tente d'y mettre des catégories dans un nestedSet, sauce Doctrine.

    Pour ceux qui ne connaîtraient pas le plug-in, on peut insérer un breadcrumb comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isicsBreadcrumbs::getInstance()->addItem('Nom du lien, '@route');
    Pas de problème particulier pour afficher le breadcrumb de l'article affiché ; quid maintenant de la catégorie dans laquelle il est ? Je peux récupérer sans problème le noeud du nested set de la catégorie actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		$cat = Doctrine_Query::create()
    				->from('category c')
    				->where('c.id = ?', $request->getParameter('categoryId'))
    				->fetchOne();
    		$node = $cat->getNode();
    Maintenant, j'en fais quoi ? Je peux le parcourir comment ? J'ai regardé la doc Doctrine (http://www.doctrine-project.org/proj...-a-simple-tree), ça ne m'a pas beaucoup aidé ; d'autres articles en ligne n'ont pas apporté grande aide.

    Au cas où, voici la table incriminée de mon schéma :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    category: 
      actAs: 
        NestedSet: 
          hasManyRoots: true
          rootColumnName: root_id
      columns: 
        name: string
        description: clob
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Maintenant, j'en fais quoi ? Je peux le parcourir comment ?
    Si tu veux accéder à l'objet sous-jacent :
    $node->getRecord()

    Si tu veux te déplacer dans la hiérarchie, je ne sais pas si je peux t'être vraiment utile car je n'ai pas encore essayé mais d'après ce que j'ai vu dans la doc, je tenterai cela :

    - parcours de l'arborescence à la main avec les méthodes classiques getChildren(), getFirstChild(), getNextSibling() etc.

    - ou avec un itérateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $it = $node->getIterator()
    $cat = $it->current()
    $it->next();
    $nextCat = $it->current();
    $nextCatLevel = $nextCat->getNode()->getLevel();
    A vue de nez, c'est un objet de classe PreOrder_Iterator et le parcours se fait en largeur (à vérifier avec les options que l'on peut passer à getIterator).

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Ce que j'aimerais, c'est du vertical, avec une seule direction : la racine de l'arbre. Avec les quelques méthodes que tu donnes en recherche sur Google, j'ai trouvé la méthode getAncestors(), qui devrait fonctionner dans ce cas... Enfin, je teste ça avec un paquet de fixtures puis je reviens dans le coin.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. [SHELL] Comment lire/parcourir un fichier ?
    Par N_BaH dans le forum Contribuez
    Réponses: 3
    Dernier message: 25/11/2013, 13h54
  2. Réponses: 0
    Dernier message: 05/11/2009, 18h12
  3. Arraylist d'Arraylists - comment la parcourir
    Par koktel_dfr dans le forum C#
    Réponses: 5
    Dernier message: 26/05/2008, 13h34
  4. Comment parcourir un tableau
    Par petitsims dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/01/2005, 14h33
  5. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo