Comment programmeriez-vous un menu avec sous-catégories infinie ?

Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Ven Mar 17, 2017 18:11

Bonjour,

J'ai un peu de mal à me représenter la chose :
Vous créez un menu dans laquelle chaque catégorie peut devenir une catégorie parente et ceci à "l'infini". On a donc categorie_parente/sous_categorie_parente/sous_sous-categorie_parente/sous_sous_sous_categorie_parente, etc....

Il est facile de lier une sous-catégorie à une catégorie parente, en récupérant l'id de cette dernière. Mais si on a 4 ou 10 sous-catégories, comment aller les récupérer en boucle ? J'imagine une sorte de boucle while avec une variable incrémentée à chaque fin de boucle, afin de récupérer les catégories parentes d'un rang supérieur. Mais c'est encore assez abstrait.

Le concept étant déjà connu et appliquée sur bien des scripts, savez-vous comment ils s'y prennent ?

Merci d'avance !

Annonces Google


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 11966
Enregistré le: 23 Nov 2005

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Ven Mar 17, 2017 18:19


Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Ven Mar 17, 2017 18:31

Salut UsagiYojimbo,

Est-ce que j'ai bien compris si je dis que dans la page que tu nous montres, il est question d'un nombre certes élevé, mais néanmoins fini de catégories :
Code: Tout sélectionner
SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ELECTRONICS';

Là, le codeur part sur une base de quatre niveaux de catégories. Comment son code peut-il fonctionner si le nombre de catégories parentes change sans arrêt, parce qu'on a rajoute et qu'on en enlève ? Ici, je ne vois pas de boucle qui modifie les paramètres de la requête.
Je veux dire que dans ce code, on a visiblement 4 niveaux d'enfants. Mais si ce nombre n'est pas connu à l'avance, que va produire cette requête ?


spout
WRInaute accro
WRInaute accro
 
Messages: 8208
Enregistré le: 14 Mai 2003

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Ven Mar 17, 2017 18:52

Il y a plusieurs techniques, les plus connues:
- Adjacency list (id/parent_id)
- MPTT (Modified Preorder Tree Traversal) (left/right)
- Materialized path

La plus facile (mais la plus gourmande) c'est l'adjacency list, il faut faire une fonction récursive:
https://www.sitepoint.com/hierarchical-data-database/
(Ce tuto explique aussi le système MPTT)

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Ven Mar 17, 2017 19:11

Hum... Merci pour les liens, Spout. En attendant une réponse à ma question qui précède ton message, me trompe-je en disant que de programmer un menu hiérarchique de ce type n'est pas supposé être quelque chose de facile et que le cas échéant, je m'apprête à galérer toute la semaine prochaine... ?

elji
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 261
Enregistré le: 6 Juin 2009

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Lun Mar 20, 2017 17:03

Alorsladaccord a écrit:si le nombre de catégories parentes change sans arrêt, parce qu'on a rajoute et qu'on en enlève ?


Je sais que c'est pas le sujet, mais pour le SEO, ça me parait pas une bonne idée de faire ça...

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 14:06

Mouaif... On peut changer la catégorie sans changer l'url de la page de destination.

noren
WRInaute accro
WRInaute accro
 
Messages: 2823
Enregistré le: 8 Avr 2011

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 14:29

Si je ne dis pas de bêtise WRI fonctionne avec des sous catégories "infinies". En tout cas au vu de l'annuaire.
De plus il me semble que WRI tourne avec wordpress (amélioré certe). Le peu que j'ai vu de la structure de la bdd de wordpress ca semble utiliser la méthode id/parent_id (taxons).
Ca doit être la cache qui permet surement de palier à la lourdeur de cette méthode. Ca reste à confirmer
Modifié en dernier par noren le Mar Mar 21, 2017 14:50, modifié 1 fois.

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 14:40

Pour ce qui est de wordpress et pour ce que j'en sais, les thèmes n'affichent jamais de menu avec une infinité de sous-catégories. C'est-à-dire que passé le second niveau, elles s'affichent toutes les unes derrière les autres, comme si de rien n'était. Ca fait que seulement la moitié du travail est fait.

Par contre sur certains scripts de forum ou de commentaires, on a effectivement des séries de sous-commentaires infinies, pour chaque commentaire. Mais dans ce cas c'est plus facile aussi, car on ne réorganise pas les commentaires comme on pourrait le faire avec les catégories, on changeant le parent.

noren
WRInaute accro
WRInaute accro
 
Messages: 2823
Enregistré le: 8 Avr 2011

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 15:19

Quand tu dis infini, quel niveau de profondeur moyen compte tu atteindre ?
Combien de catégories et sous catégories envisages tu (des dizaines, des centaines, des milliers...) ?
As tu essayé de faire un test avec la première méthode id/parent_id ? (même si c'est la moins efficace, mais la plus simple a comprendre et mettre en place)
Ton arborescence est elle souvent modifiée (à quelle fréquence ?)
Générer le menu puis le mettre en cache, ne serait pas suffisant ?

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 15:29

noren a écrit:Quand tu dis infini, quel niveau de profondeur moyen compte tu atteindre ?
Combien de catégories et sous catégories envisages tu (des dizaines, des centaines, des milliers...) ?

Ah bah non, là ça m'apparaît être la question qui ne se pose pas. Si c'est infini, c'est infini, point.

As tu essayé de faire un test avec la première méthode id/parent_id ? (même si c'est la moins efficace, mais la plus simple a comprendre et mettre en place)

A un seul niveau ? Parent-enfant ? Ca c'est facile.

Ton arborescence est elle souvent modifiée (à quelle fréquence ?)

Bah, même réponse que ci-dessus.

Générer le menu puis le mettre en cache, ne serait pas suffisant ?

Genre en html basique, écrit à la main sans code ? Si, bien sûr, m'enfin c'est plus la peine d'ouvrir un topic :lol:


Je comprends ta réponse noren, pourquoi faire compliqué quand on peut faire simple. C'est du pratique.
Dans ce topic avant théorique, je voulais déjà évaluer la complexité de la tâche, sur le plan théorique. Et visiblement, c'est assez complexe.


niap
WRInaute discret
WRInaute discret
 
Messages: 128
Enregistré le: 17 Oct 2009

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 15:47

Alorsladaccord a écrit:
Générer le menu puis le mettre en cache, ne serait pas suffisant ?

Genre en html basique, écrit à la main sans code ? Si, bien sûr, m'enfin c'est plus la peine d'ouvrir un topic :lol:

Non c'est pas ça.
L'idée de noren c'est :
- Charger les catégories avec PHP depuis une base de données
- Les structurer
- Exporter les données dans un fichier de cache (HTML, XML, JSON, peut importe)

Quand tu ajoute / modifie / supprime une catégorie, tu efface le cache.
Comme ça, tu évite plein d'accès redondants à la base de données.

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Mar Mar 21, 2017 15:49

Mais quand tu dis "les structurer", ça veut dire quoi ?

noren
WRInaute accro
WRInaute accro
 
Messages: 2823
Enregistré le: 8 Avr 2011

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Jeu Mar 23, 2017 11:45

C'est exactement ça niap

Les structurer : faire ta requête, préparer ton arborescence en html ou ce que tu veux (menu) et la mettre en cache. De cette facon meme si ta requete est un peu lourde ca ne gênera presque plus ou de façon très ponctuel.

J'ai quand même du mal à comprendre cette notion de menu avec sous catégories a l'infini. Question surement très bête, car j'imagine évidemment que tu y a réfléchi, mais n'as tu pas d'autres solutions que ces sous catégories a l'infini ?

Pourrais tu donner des exemples concrets de ce que tu veux ? quels cas de figure pourraient engendrer une telle arborescence; Des fois "la vérité est ailleurs" :mrgreen:


Furtif
WRInaute passionné
WRInaute passionné
 
Messages: 2064
Enregistré le: 9 Aoû 2005

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Jeu Mar 23, 2017 11:48

J'ai quand même du mal à comprendre cette notion de menu avec sous catégories a l'infini.


La reflexion la plus sensée de ce topic...


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 11966
Enregistré le: 23 Nov 2005

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Jeu Mar 23, 2017 11:58

Ne serait-ce qu'au niveau UX...

Alorsladaccord
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 438
Enregistré le: 30 Juil 2014

Re: Comment programmeriez-vous un menu avec sous-catégories infinie ?

Message le Jeu Mar 23, 2017 12:58

noren a écrit:C'est exactement ça niap

Les structurer : faire ta requête, préparer ton arborescence en html ou ce que tu veux (menu) et la mettre en cache. De cette facon meme si ta requete est un peu lourde ca ne gênera presque plus ou de façon très ponctuel.

J'ai quand même du mal à comprendre cette notion de menu avec sous catégories a l'infini. Question surement très bête, car j'imagine évidemment que tu y a réfléchi, mais n'as tu pas d'autres solutions que ces sous catégories a l'infini ?

Pourrais tu donner des exemples concrets de ce que tu veux ? quels cas de figure pourraient engendrer une telle arborescence; Des fois "la vérité est ailleurs" :mrgreen:


Disons que ne connaissant pas à l'avance le nombre de sous-catégories que peut comporter mon menu, je me dis que le plus sensé est donc de programmer un menu avec une infinité de sous-catégories possible. Afin de ne pas être bloqué par la suite. Mais à en croire les réponses de ce topic, c'est une sorte d'exercice de haute volée.


Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :