Comment créer une barre de navigation ?

Eléphant du PHP | 153 Messages

18 sept. 2006, 17:01

Bonjour à tous,

Je souhaite afficher une barre de navigation du type (comme phpbb) :

PHPFrance Index du Forum -> Débuter en PHP

J'ai un menu de navigation et dans mon lien j'ai une $catid, comment puis-je m'en servir ?
Tout ce que j'ai réussi à faire c'est, je clique sur une catégorie principale, j'affiche la barre :

Index -> Categorie1

Je clique sur sa sous-catégorie dans le menu, j'affiche :

Index -> SousCategorie1 :?

Au lieu de :

Index -> Categorie1 -> SousCategorie1

Merci pour votre aide :D

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

18 sept. 2006, 17:10

En supposant que chacune de tes catégories soit liée à son parent par un identifiant, ou via l'arborescence d'un tableau il devrait t'être possible de faire une boucle pour partir de la catégorie active et de remonter jusqu'au niveau zéro :)

Tu as un bout de code à nous montrer ?

Eléphant du PHP | 153 Messages

18 sept. 2006, 17:56

Voila ce que j'ai fait :
if ($catID == "0") { $where_clause2 = "WHERE catID = 0"; }
else { $where_clause2 = "WHERE catID = $catID"; }
echo "<a href='site.html'><u>Index des cat&eacute;gories</u></a>";
$sql = "SELECT catID, nom FROM categories $where_clause2";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
	print " / <a href='index.php?' title=''><u>" . $nom . "</u></a>";		
}
J'ai bien un champs "parent" dans ma table categories.
Mais je ne sais pas du tout comment l'utiliser.

Merci.

Eléphant du PHP | 184 Messages

18 sept. 2006, 22:59

Je ne vois pas l'utilité de ta condition, pourrais tu expliquer à quoi elle sert?
Image

Eléphant du PHP | 153 Messages

19 sept. 2006, 10:22

Et bien en fait, à rien :?

Je l'ai enlevée et ça fonctionne sans.

Par contre, je n'arrive toujours pas à obtenir ça :

Index -> Categorie1 -> SousCategorie1

:roll:

Eléphant du PHP | 184 Messages

19 sept. 2006, 12:21

Pourrais tu nous donner la structure de ta table categories?
Image

Eléphant du PHP | 153 Messages

19 sept. 2006, 12:32

Voila :D

CREATE TABLE `categories` (
`catID` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`parent` int(11) default NULL,
`fullname` varchar(150) NOT NULL default '',
`description` text,
`image` varchar(30) default NULL,
PRIMARY KEY (`catID`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

Eléphant du PHP | 184 Messages

19 sept. 2006, 13:11

Avec des expliquations !! :lol: on ne sait pas comment fonctionne ta base de données (comme est-elle renseignée?)
Toutes tes catégories se trouvent ici? mélangées avec les sous-catégories? si une catégories est renseignée dans la base possède-t'elle quelque chose dans le champs parent? .....

Bref des détails!
Image

Eléphant du PHP | 153 Messages

19 sept. 2006, 13:46

Désolé pour mon incompétence :? :D

Donc, oui, mes catégories sont mélangées avec mes sous-catégories (2 niveaux)

Exemple :

catID | 1
parent | 0
nom | exp1

catiD | 2
parent | 1
nom | sous_exp1

catID | 3
parent | 0
nom | exp2

catiD | 4
parent | 3
nom | sous_exp2

Eléphant du PHP | 184 Messages

19 sept. 2006, 14:07

Si je comprends bien tes catégories possèdent en parent la valeur commune 0, on peut donc commencer par lister tous tes catégories dont parent = 0 pour avoir la trame principale de ton menu.
Ensuite il suffit de boucler chaque élément en cherchant les sous-catégories qui en dépendent. Pour shématiser :

Code : Tout sélectionner

. la requete categories : trouver les categories dont parent = 0 . la boucle : lister les catégories dont parent = 0 --> catID - afficher les catégories - la requete sous-catégories : chercher les categories qui possèdent parent = catID - affichage des sous-catégories . fin de boucle
Image

Eléphant du PHP | 153 Messages

19 sept. 2006, 14:19

Ce n'est pas un menu que je veux :D
Le menu je l'ai déja.

Mais une barre de navigation avec liens (comme phpbb) :

PHPFrance Index du Forum -> Débuter en PHP

je clique sur une catégorie principale, j'affiche la barre :

Index -> Categorie1

Je clique sur sa sous-catégorie dans le menu, j'affiche :

Index -> SousCategoriede1

Au lieu de ce que je voudrais :

Index -> Categorie1 -> SousCategoriede1

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

19 sept. 2006, 14:24

Ce qu'il te faudrait c'est une fonction récursive. Tu vas chercher dans ta base l'id parent de la page active, tant que celui-ci est différent de 0.

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 :)

Eléphant du PHP | 184 Messages

19 sept. 2006, 14:24

Que ce soit un menu ou autre chose le principe reste le même et seul l'affichage change.
Image

Eléphant du PHP | 153 Messages

20 sept. 2006, 11:29

Bon, je n'y arrive pas, trop compliqué pour mes petites méninges :? :lol:

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

20 sept. 2006, 12:50

C'est parce que t'y mets de la mauvaise volonté :P
Qu'est ce que tu n'arrives pas à faire (et me dit pas "le tout" ;))
Qu'est ce que tu as déjà fait ?
Qu'est ce que tu ne comprends pas ?
Quand est-ce qu'on mange ? (euh non attends, celle là elle était pas pour toi ;))