Comment créer une barre de navigation ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment créer une barre de navigation ?

par Cobra52 » 08 nov. 2006, 10:45

Personne pour m'aider, SVP ? :D

par Cobra52 » 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

par Cobra52 » 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

par mere-teresa » 22 sept. 2006, 09:55

Modération : Si c'est résolu, merci de penser à appuyer sur le bouton Résolu.

par Cobra52 » 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:

par Ryle » 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é :)

par Cobra52 » 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

par Ryle » 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... :)

par Cobra52 » 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:

par Ryle » 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 :)

par Cobra52 » 21 sept. 2006, 15:58

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

par mere-teresa » 21 sept. 2006, 15:53

Bah change ta requête...pour les ordonner par ID, ou par parent, par exemple :)

par Cobra52 » 21 sept. 2006, 15:32

Un petit peu d'aide svp ? :lol:

par Cobra52 » 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 !

par Cobra52 » 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: