Comment créer une barre de navigation ?

Eléphant du PHP | 153 Messages

20 sept. 2006, 13:36

Bon, pour ce qui est de manger, moi c'est fait :D :wink:

"Tu vas chercher dans ta base l'id parent de la page active, tant que celui-ci est différent de 0."

Donc je fait un "SELECT parent FROM categories WHERE catID = '$catID'"

Par contre ça "tant que celui-ci est différent de 0." ?????

Et ça "Tu vas ainsi récupérer toutes les infos dont tu as besoin (en partant de la fin). L'idéal étant de les mettre dans un tableau que tu n'as plus qu'à lire pour reconstruire ton chemin " ????

Oui je sais, je suis pas très loin de ça "Qu'est ce que tu n'arrives pas à faire (et me dit pas "le tout" ) " :oops:

Eléphant du PHP | 153 Messages

20 sept. 2006, 17:47

Voila ce que j'ai réussi à faire :
$parent = 1;
while($parent)
{
	$sql_arbo = "SELECT parent, name FROM categories WHERE catID = '$catID'";
	$res_arbo = mysql_query($sql_arbo);
	$result_arbo = mysql_fetch_array($res_arbo);
	$parent = $result_arbo[0];
	$name = htmlspecialchars($result_arbo[1]);
		
	echo " / <a href=\"index.php?catID=$catID\" class=\"\">".$name."</a>";	
	
	$categoryID = $parent;
}
Mais j'ai encore un soucis :?

Je me retrouve avec une barre de navigation comme ça :

index / sous-categorie1 / categorie1

Au lieu de :

index / categorie1 / sous-categorie1

Par contre, au départ, j'ai bien :

index / categorie1

Et je ne comprends pas pourquoi !

Eléphant du PHP | 153 Messages

21 sept. 2006, 15:32

Un petit peu d'aide svp ? :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 sept. 2006, 15:53

Bah change ta requête...pour les ordonner par ID, ou par parent, par exemple :)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 153 Messages

21 sept. 2006, 15:58

J'y avais bien pensé, mais ça ne fonctionne pas mieux. :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 sept. 2006, 16:01

T'es pas loin du tout, tu as juste loupé un petit bout de mes explications.. en effet, en procédent comme ceci, tu vas commencer par le dernier élément de ton chemin et remonter jusqu'au premier (le parent zéro)

Donc forcément, si tu les affiches au fur et à mesure, tu vas les avoir à l'envers... par contre, si au lieu de les afficher tu les colles à la suite dans un tableau, tu les auras aussi en sens inverse, mais tu vas pouvoir boucler sur ton tableau en partant de la fin et à ce moment là, les afficher dans l'ordre :)

Eléphant du PHP | 153 Messages

21 sept. 2006, 16:20

Oui, bon là il faut m'aider, parce que je suis arrivé au limites de mes connaissances (voir même, je les ai largement dépasées) :? :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 sept. 2006, 16:37

Bon alors déjà, reprenons ton code et corrigeons 2-3 p'tits trucs au passage :)
$tab = array(); // le tableau en question :)
$parent = 1; 
while($parent != 0) { 
    $sql_arbo = "SELECT parent, name FROM categories WHERE catID = '$catID'"; 
    $res_arbo = mysql_query($sql_arbo) or die(mysql_error()); // on sait jamais s'il y a une erreur sql, autant la voir de suite :)
    $result_arbo = mysql_fetch_array($res_arbo); 
    $parent = $result_arbo['parent']; // c'est mieux d'utiliser les noms de colonne, ca se lit plus vite et ca évite les erreurs :)
    $name = htmlspecialchars($result_arbo['name']); // bah ouais, si je le fais au dessus... ;)

    $tab[] = ' <a href="index.php?catID='.$catID.'" class="">'.$name.'</a>'; // au lieu de l'afficher, je colle le nom à la suite de mon tableau
     
    $catID = $parent; // si tu ne met pas le même nom que dans ta requête ca va pas marcher :)
}


Normalement, maintenant tu as un tableau $tab qui contient ton chemin en partant du dernier élément. Pour t'en assurer, tu peux utiliser le code suivant :
echo "<pre>";
print_r($tab);
echo "</pre>";
pour voir la tête du bestiau

Ce qui t'interesse, c'est de partir du premier, il faut donc retourner ton tableau. Tu peux soit plonger ta main dans la gueule du monstre, l'attraper et le retourner sauvagement ou faire appel à une fonction très bien, qui est justement là pour ça ;)
$tab = array_reverse($tab);
Encore un p'tit coup de
echo "<pre>";
print_r($tab);
echo "</pre>";
ca fait pas de mal, et on est sur de ce qu'on a fait ;)

Reste plus qu'à lire le tableau, avec un foreach, un while, un ce que tu veux, et à afficher les différents éléments pour constituer ton menu :)
foreach($tab as $lien) { // pour chaque élément du tableau placé dans $lien
  echo $lien . " / "; // on l'affiche :)
}
Tu peux aussi frimer un max avec un truc du genre :
echo implode(" / ", $tab); // Rassemble les éléments du tableau en une chaîne (enfin d'après la doc :))
A toi... :)

Eléphant du PHP | 153 Messages

21 sept. 2006, 16:44

Oulaaaaaaaaaaa !!!!
Bein j'étais pas prêt d'arriver à faire ça !! :?

Merci Ryle :wink:

Je reprends ton post morceau par morceau, j'essaie de comprendre, j'applique et je te tiens au courant :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 sept. 2006, 17:02

Bah c'est surtout beaucoup de blabla, quelques tuyaux et un peu de test pour que tu vois le pourquoi et le comment :)

Pour le reste je n'ai concretement ajouté que trois lignes et j'en ai modifié une... même si tu n'étais soit disant "pas prêt d'arriver à faire ça", t'étais quand même plutôt bien avancé :)

Eléphant du PHP | 153 Messages

21 sept. 2006, 18:05

Bien, tout fonctionne ! :)

Je n'ai pas encore tout assimiler, mais avec le temps ...

Bref, par contre, je vais devoir ouvrir un autre topic, j'ai un soucis de modulo.
J'ai suivi un topic du forum, mais comme par hazard, ça ne fonctionne pas chez moi :P :roll:

Encore merci :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

22 sept. 2006, 09:55

Modération : Si c'est résolu, merci de penser à appuyer sur le bouton Résolu.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 153 Messages

07 nov. 2006, 16:03

Bonjour à tous,

Je reviens vers vous au sujet de ma barre de navigation.

Mes catégories sont de la sorte :

Catégorie 1
-->Sous-catégorie de 1
---->Sous sous-catégorie de 1

J'arrive bien à afficher la barre de navigation pour une sous catégorie :
Index / Catégorie 1 / Sous-catégorie de 1

Mais dans le cas de la sous sous-catégorie, j'ai ça :
Index / Catégorie 1 / Sous sous-catégorie de 1 / Sous-catégorie de 1

Au lieu de :
Index / Catégorie 1 / Sous-catégorie de 1 / Sous sous-catégorie de 1

Le code php :
$separ = " / ";
	$tab = array(); 
	$parent = 1;//pour rentrer dedans
	while($parent != 0)
	{
		//on va chercher le nom et la categorie mere
		$sql_arbo = "SELECT parent, name, fullname FROM categories WHERE categoryID = '$categoryID'";
		$res_arbo = mysql_query($sql_arbo) or die(mysql_error());
		$result_arbo = mysql_fetch_array($res_arbo);
		$parent = $result_arbo["parent"];
		$name = htmlspecialchars($result_arbo["name"]);
		$fullname = $result_arbo["fullname"];
		$tab[] = $separ." <a href=xxxxxxxx">".$name."</a>";
		
		$tab = array_reverse($tab); 
		// on passe au suivant
		$categoryID = $parent;
	}
	foreach($tab as $arbo) 
	{ 
		// pour chaque élément du tableau placé dans $arbo 
		echo $arbo; 
  	}
Je ne vois pas du tout pourquoi les catégories s'inversent lors de l'affichage de la sous sous-catégorie.

Je fais donc appel à votre bon savoir.
Merci :D

Eléphant du PHP | 153 Messages

07 nov. 2006, 16:13

Je précise qu'en enlevant :
$tab = array_reverse($tab);
J'ai bien l'affichage inversé :

Sous sous-catégorie de 1 / Sous-catégorie de 1 / Catégorie 1 / Index

Eléphant du PHP | 153 Messages

08 nov. 2006, 10:45

Personne pour m'aider, SVP ? :D