Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2007, 20h42   #1
Invité de passage
 
Inscription : décembre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 5
Points : 1
Points : 1
Par défaut [Conception] Structure arborescente de catégories

Bonjour à tous,

Je suis entrain de restructurer mon site et je cherche un moyen de bien structurer les categories d'articles.

Je voudrais pouvoir créer des categories et des sous-categories à l'infini.

Par exemple :

Categorie1
Sous-Categorie1
Sous-sous-categorie1
Sous-sous-sous-categorie1
Article1
Article2
Sous-sous-sous-categorie2
Article3
Article4
Sous-sous-categorie2
etc...

J'aimerais donc qu'on puisse créer autant de sous-catégorie que possible.

Les catégories seront indexées dans la base de données. Je comptais donner a chaque categorie (que se soit une categorie ou une sous-sous-categorie) une id.

Mais je cherche moyen optimisé de gérer tout ca. Que se soit pour l'ajout de nouvelles catégories ou pour l'affichage.

Je pensais a une structure arborescente (ca me semble logique).
Mais j'hésite sur la manière de l'implémenter.

Je pensais donner a chaque categorie (= sous categorie etc..)
un id, sa profondeur (ex :1 pour categorie, 2 pour sous-categorie ect..), et l'id de son pére (la catégorie parente).

Pour l'affichage, j'aurai fait ca de manière récursive mais là encore j'hésite dans la manière de l'implémenter, de faire les boucles etc...

Tout conseil me sera très utile.

Merci d'avance.
zmaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 12h51   #2
Membre régulier
 
Homme Julien SIMON
Ingénieur systèmes et réseaux
Inscription : février 2006
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Julien SIMON
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Transports

Informations forums :
Inscription : février 2006
Messages : 100
Points : 99
Points : 99
Bonjour,

Moi ça me rappelle les arbres et le concept père > fils.

Je m'explique :

On pourrait voir chaque catégorie de manière identique mais en précisant sa catégorie parent qui serait en fait l'identifiant du parent.

Exemple :
Catégorie : Main
Identifiant : 1
Id Parent : NULL

Catégorie : Articles
Identifiant : 2
Id Parent : 1

Catégorie : Soumis par les visiteurs
Identifiant : 3
Id Parent : 2

Ensuite on utilise PHP pour faire la mise en forme en fonction des identifiants.

J'espère avoir été assez souple dans mon explication ?
MightyDucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 15h44   #3
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

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

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
Créer 2 tables dans ton ODBC (mysql par exemple) :

Une table CATEGORIE(id_cat,nom,description)
Une table SOUSCATEGORIE(id_souscat,nom,description,id_cat)

id_cat dans la table SOUSCATEGORIE contiendra l'id de la catégorie à laquelle elle est associée.
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 22h38   #4
Invité de passage
 
Inscription : décembre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 5
Points : 1
Points : 1
MightyDucks > Je pensais justement faire cette méthode. Je voulais ajouter la profondeur mais enfaites cela ne sert a rien, l'id du pére suffit comme tu le montre dans ton exemple.
Et ton explication est très claire.

ThomasR > Je me suis mal exprimé, je voulais pouvoir créer des sous-catégories, des sous-sous-catégories des sous-sous-sous-catégories de plus en plus petites et toutes imbriquées les unes dans les autres, un peu comme un arbre qui s'agrandit.


Merci à vous deux pour vos réponses.
zmaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 23h49   #5
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Sans vouloir être véxant, je te déconseille la solution de ThomasR car top peu évolutive. Par contre je rejoins MightyDucks sur la gestion avec une seule table catégorie dans laquelle tu as l'identifiant du parent. Ca me semble être la manière la plus fiable et la plus courante. C'est sur que si tu as 100 niveaux, ca va poser problème pour la réccursivité (et encore...) mais bon à mon avis tu n'auras aucun souci en terme de performance vu ce que tu demandes.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 09h23   #6
Membre régulier
 
Homme Julien SIMON
Ingénieur systèmes et réseaux
Inscription : février 2006
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Julien SIMON
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Transports

Informations forums :
Inscription : février 2006
Messages : 100
Points : 99
Points : 99
Ah bah faut que je téléphone à mon ancien profs d'algo, il serait content de voir que pour une fois j'ai été clair dans l'explication d'un algo
MightyDucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 09h26   #7
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

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

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
ha oui donc tu as simplement une table

CATEGORIE(id_cat,nom,description,id_parent)

Si id_parent = 0 ou NULL, c'est que la catégorie est de niveau 1.

C'est de la récursivité.

À partir du moment ou l'on savait qu'il n'y aurait que des catégorie de niveaux 2 ma solution était parfaitement adaptée.
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 10h09   #8
Invité de passage
 
Inscription : décembre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 5
Points : 1
Points : 1
Merci à tous.

ThomasR > En effet ta proposition aurait été parfaites si il n'y avait que des categories et des sous-categories. Quand je l'ai lue, j'ai compris que j'avais mal expliqué ce que je voulais faire.

A mon avis, la récursivité ne devrait pas etre trop lourde a faire puisque j'irai rarement au delà de 6 niveaux.


Après pour afficher l'arborescence des categories parentes d'un article, je regarderai les parents jusqu'a arriver a une categorie avec une id parente nulle.

ex :
Categorie1 > sous-cat > sous-sous-cat > Article

Encore merci a tout le monde, j'avais peur que mon idée de récursivité soit un peu trop "originale" mais je vois que mal de monde a cette idée.
zmaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 10h18   #9
Membre régulier
 
Homme Julien SIMON
Ingénieur systèmes et réseaux
Inscription : février 2006
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Julien SIMON
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Transports

Informations forums :
Inscription : février 2006
Messages : 100
Points : 99
Points : 99
Disons que le challenge du moins pour ma part est toujours d'arriver au code ou à la solution la plus performante.

C'est bon de se lancer des défis !
MightyDucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h00.


 
 
 
 
Partenaires

Hébergement Web