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

Langage PHP Discussion :

[Tableaux] Obtenir l'arborescence d'un menu ? [Débutant(e)]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut [Tableaux] Obtenir l'arborescence d'un menu ?
    Bonjour,

    j'utilise ce code pour remonter l'arborescence des éléments d'un menu
    Ça fonctionne à moitié pour une raison que je ne comprends pas…

    Vous comprenez pourquoi il s'arrête parfois de remonter l'arborescence alors qu'il y a un $cat_father_id (donc une catégorie au-dessus) qui existe encore ?

    Moi je sèche…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    	// get category array for cat dir
    	$query = "SELECT cat_id, cat_name, cat_father_id FROM ".$glob['dbprefix']."Category ORDER BY cat_id DESC";
    	$catArray = $db->select($query);
     
    	// La dernière catégorie en bout de chaîne (transmise en paramètre par une fonction) 
    	// C'est OK pour ça
    	$dirArray[0] = $catName."/";
     
    	// C'est là que ça doit se gâter :
    	for ($j=0; $j<=count($catArray); $j++) {
    		if($catArray[$j]['cat_id']==$cat_father_id) {
    			$dirArray[$j+1]= $catArray[$j]['cat_name']."/";
    			$cat_father_id = $catArray[$j]['cat_father_id'];
    		}
    	}
    	krsort($dirArray);
    	reset($dirArray);
    	$dir = "";	
    		foreach($dirArray as $key => $value){
    	 		$dir.= $value;
    	}
    		return $dir;
    Merci pour votre aide…

  2. #2
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    J'avoue ne pas bien comprendre ce que tu cherches à faire.
    Ta variable $cat_father_id peut tout aussi bien ne jamais être initialisée ...

    Après peut être que la structure de ta table empêche ça, mais là tel quel c'est un peu ce qui me vient à l'esprit.

    Tu as un exemple de ta table et de ce que tu aimerais afficher?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Citation Envoyé par Linio Voir le message
    Ta variable $cat_father_id peut tout aussi bien ne jamais être initialisée ...
    Si, elle est toujours initialisée : elle à 0 comme valeur par défaut

    En fait le souci vient quand je change de position une ancienne catégorie…
    C'est à cause du et du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($j=0; $j<=count($catArray); $j++)
    Il faudrait bien mieux je pense utiliser un while
    Du style : while $cat_father_id est différent de 0, on stocke la valeur $cat_name dans le $dirArray et on continue à remonter l'arborescence

    Mais je ne sais pas écrire ça…

  4. #4
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Si tu la veux à 0 par défaut vaux mieux l'initialiser...

    Au delà de ça j'ai toujours pas trop la vision de ta table, mais si tu as plusieurs 'arborescence' effectivement ton script peut pas vraiment marcher.

    Si tu ne veux faire que l'affichage, pourquoi ne pas construire ta chaine au fur et à mesure en 'rajoutant' à chaque fois le père de ta catégorie à la chaine si tu en croises un dans ta base de donnée. Tu peux créer toutes tes arborescences comme ça.

    Du genre tu crées un tableau vide, puis tu y mets l'id de la catégorie père si elle existe et le nom de ta catégorie, puis dans ton for tu vérifie à chaque nouvelle catégorie que son id ne correspond pas au premier id d'un de tes tableau et si oui tu l'ajoutes.

    Du genre si tu as
    categorie seule [id : 0]
    musique [id:2] > musique classique [id:3]
    videos [id:4]

    Tu as un tableau : [[4;"videos"]]
    Puis tu vérifie la seconde (musique classique):
    [[null;"videos"][2;"musique classique"]]
    Puis musique, et là l'id est dans le tableau donc tu rajoutes:
    [[null;"videos"][null;"musique";"musique classique"]]

    etc...

    Bon c'est la solution d'après repas de midi, et pas codée parce que j'ai les yeux qui se ferment mais bon.

    Faudrait voir en fonction de ta table, mais ça doit pas être trop trop dur à coder, dans tous les cas je pense qu'un système de pile est le mieux dans ton cas, quelque soit la manière dont tu le code.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Je m'en suis sorti en mettant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	// La dernière catégorie (en bout de chaîne)
    	$dir = $catName."/";
     
    	while ($old_cat_father_id != 0){
    		$query = "SELECT cat_id, cat_name, cat_father_id FROM ".$glob['dbprefix']."Category WHERE cat_id = $old_cat_father_id";
     
    	$catArray = $db->select($query);
    	//print_r ($result);
    	$dir= 	$catArray [0]['cat_name']."/".$dir;
    	$old_cat_father_id = $catArray [0]['cat_father_id'];
     
    	}
    		return $dir;
    Et là je remonte jusqu'en haut d el'arborescence…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Obtenir les éléments de $_GET
    Par chrgui dans le forum Langage
    Réponses: 3
    Dernier message: 15/01/2007, 16h30
  2. [Tableaux] Obtenir liste keys
    Par Fabouney dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2006, 12h28
  3. [Tableaux] demande de code pour un menu deroulant
    Par carmen256 dans le forum Langage
    Réponses: 5
    Dernier message: 27/01/2006, 20h36
  4. [Tableaux] obtenir l'adresse web et non le chemin
    Par Husqvarna dans le forum Langage
    Réponses: 6
    Dernier message: 28/10/2005, 13h56

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