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

Messages: 522

Enregistré le: 30 Juil 2014

Message le Ven Mar 17, 2017 19: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 !
Haut
29 Réponses
Messages: 12242

Enregistré le: 23 Nov 2005

Message le Ven Mar 17, 2017 19:19

Stackoverflow est ton ami http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hier ... sive-query
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Ven Mar 17, 2017 19: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 ?
Haut
Messages: 8508

Enregistré le: 14 Mai 2003

Message le Ven Mar 17, 2017 19: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)
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Ven Mar 17, 2017 20: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... ?
Haut
Messages: 266

Enregistré le: 6 Juin 2009

Message le Lun Mar 20, 2017 18: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...
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 21, 2017 15:06

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

Enregistré le: 8 Avr 2011

Message le Mar Mar 21, 2017 15: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 15:50, modifié 1 fois.
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 21, 2017 15: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.
Haut
Messages: 2905

Enregistré le: 8 Avr 2011

Message le Mar Mar 21, 2017 16: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 ?
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 21, 2017 16: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.
Haut
Messages: 140

Enregistré le: 17 Oct 2009

Message le Mar Mar 21, 2017 16: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.
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 21, 2017 16:49

Mais quand tu dis "les structurer", ça veut dire quoi ?
Haut
Messages: 2905

Enregistré le: 8 Avr 2011

Message le Jeu Mar 23, 2017 12: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:
Haut
Messages: 2079

Enregistré le: 9 Aoû 2005

Message le Jeu Mar 23, 2017 12: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...
Haut
Messages: 12242

Enregistré le: 23 Nov 2005

Message le Jeu Mar 23, 2017 12:58

Ne serait-ce qu'au niveau UX...
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Jeu Mar 23, 2017 13: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.
Haut
Messages: 12242

Enregistré le: 23 Nov 2005

Message le Jeu Mar 23, 2017 15:31

C'est surtout qu'il faut aussi se poser la question du rendu graphique final. Si tu parles de menu déroulant, imagines-toi les cas où tu as plus de sous-catégories que de place pour les afficher. Tu repars dans l'autre sens (dans le cas d'un menu horizontal) ?
Haut
Messages: 2079

Enregistré le: 9 Aoû 2005

Message le Jeu Mar 23, 2017 16:18

Mais à en croire les réponses de ce topic, c'est une sorte d'exercice de haute volée.


Surtout que tu es le seul a connaitre le site/thematique/projet en question.. si tu ne trouve pas de reponses/solutions c'est que tu poses mal le probleme a la base, mais sans connaitre les tenants et aboutissants on est dans le flou le plus total...

En 20 ans de web j'ai jamais vu de cas identique, et ce, quel que soit le probleme ou l'importance du site.. Donc je pense que tu es parti tete baissée dans une direction, alors qu'il doit y en avoir beaucoup d'autres. J'aimerai bien savoir ce qui pourrait engendrer "Si c'est infini, c'est infini, point."..

Ha yes... tu veux concurrencer gogole...

:D :D :D :D
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Lun Mar 27, 2017 16:59

Bon, j'ai laissé tomber l'idée, de toute façon le rendu à l'affichage serait problématique. Comme quoi, internet n'est pas encore adapté à tous les cas informatiques possible.

Ceci dit, pour faire avancer le schmilblick, je crois qu'une manière simple et efficace de faire un menu dynamique "infini", c'est tout simplement d'utiliser ajax.

Comme moi je sais pas faire, ça enterre doublement le problème, mais bon...
Haut
Messages: 2905

Enregistré le: 8 Avr 2011

Message le Lun Mar 27, 2017 23:13

En effet sans en savoir plus que ca, rien qu'au niveau du rendu ta solution ne paraissait pas viable.
Si tu as vraiment beaucoup de sous menu tu n'aura peut être pas d'autre choix que de faire quelque chose qui se rapproche de l'annuaire de WRI. En gros on accède aux sous catégories seulement quand on a cliqué sur la catégorie parente.

Mais dans tous les cas il faudra faire attention a la façon de structurer tout ça et a la façon de l'afficher si tu ne veux pas avoir de requêtes gourmandes. Surtout si tu utilises la solution classique id/id parent
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 28, 2017 13:42

L'annuaire wri est tout ce qui se fait de plus classique, sur le plan technique. Ca ne me parait pas valable pour un menu vertical multi-pages. Je verrai pour faire ça en ajax, dans un second temps.

Merci pour vos réponses. Nous y reviendrons.
Haut
Messages: 12242

Enregistré le: 23 Nov 2005

Message le Mar Mar 28, 2017 13:58

En listant toutes tes pages dans un menu, tu te tires autant une balle dans le pied côté UX que côté SEO à mon avis.
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 28, 2017 15:39

Vouaif... Non mais, je ne veux pas lister toutes les pages dans un menu. Mais peu importe.

En fait, ce que je souhaite(ais) reproduire, c'est le système de commentaire du CMS spip.

Si je ne m'abuse, ce SMS permet de répondre à n'importe quel commentaire, ce qui donne des lignées de sous-commentaires hiérarchisées. Le principe est intéressant. Après, c'est vrai que pour l'affichage, certains commentaires s'affichent complètement verticalement, avec une lettre en dessous l'autre... C'est donc illisible. Mais bon, le système demeure pratique. Cela étant, peut-être spip limite-t'il aussi le nombre de réponses à un certain nombre. Ce n'est peut être donc pas un bon exemple de "menu infini".
Haut
Messages: 12242

Enregistré le: 23 Nov 2005

Message le Mar Mar 28, 2017 15:44

Ca serait bien la première fois que Spip s'avérerait être un exemple à suivre :lol:
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mar Mar 28, 2017 16:01

Je ne sais pas, je n'ai jamais utilisé ce cms. D'ailleurs, je n'aime pas les cms, je viens de quitter IPB.

Je ne sais pas où pèche Spip, mais enfin, leur système de commentaire/sous-commentaire est quand même chouette et donne souvent lieu à de longs débats en réponse aux articles.

Objection ?
Haut
Messages: 2905

Enregistré le: 8 Avr 2011

Message le Mar Mar 28, 2017 19:21

Pour l'affichage suffit d’éviter le système en escalier après la deuxième réponse à un commentaire, car effectivement ensuite ça devient illisible et absurde

regarde le système de commentaire de jeuxvideo.com, ça pourrait être une réponse à ton probleme
Haut
Messages: 522

Enregistré le: 30 Juil 2014

Message le Mer Mar 29, 2017 13:58

noren a écrit:Pour l'affichage suffit d’éviter le système en escalier après la deuxième réponse à un commentaire, car effectivement ensuite ça devient illisible et absurde

regarde le système de commentaire de jeuxvideo.com, ça pourrait être une réponse à ton probleme


Système en escalier, tu as trouvé la bonne expression. Mais c'est justement ce que je trouve intéressant. Sans quoi a contrario, on ne voit plus de prime à bord quel est la hiérarchie des commentaires.
Un lien pour les commentaires sur JV ?

Sinon il y a possibilité de faire des incrustations de citations (balise [quote]), directement dans les messages. Le problème, c'est ensuite de pouvoir les éditer.
Haut
Messages: 2501

Enregistré le: 24 Fév 2005

Message le Mer Mar 29, 2017 14:52

Bonjour,

tu peux aussi prévoir un nombre maximum de sous catégorie, pour 2 raisons :
- il est peu probable qu'au delà du 6eme niveau tu ai quelques chose a remplir, sauf si tu commence par "univers_terrestre/voie_lactée/terre/Europe/france/" ... :D
Pour infos, j'ai 26 000 catégories dans mon projet shopping et il est très rare que j'atteigne le 6eme niveau. En allant jusqu'a 8, tu es pratiquement certain de couvrir tout ce qui peut exister dans cet univers ...
- Il n'est pas très bon pour le référencement d'aller au delà du 4eme niveau si les infos que j'ai son correctes.
Haut
Messages: 2501

Enregistré le: 24 Fév 2005

Message le Mer Mar 29, 2017 14:59

Pour infos, j'ai procédé de la manière suivante pour la présentation en colonne a Gauche :
MEnu :
ACCEUIL
- CATEGORIE1
- SSCATNIV1_CAT1
- SSCATNIV2_CAT1
- SSCATNIV3_CAT1
- SSCATNIV4_CAT1
(liste sous cat5)
    sscat5 produit1
    sscat5 produit2
    sscat5 produit3
    sscat5 produit4
    sscat5 produit5

CHAQUE DERNIER NIVEAU est représenté en LISTE des dernières sous-catégories de produits.

J'ai généré dans un champ texte le code html du menu, comme ca je n'ai plus a calculer. Je régénère le code html si il y a des modifs. Il y a un champ ID par niveau, mais aussi un champ ID unique, ce qui permet d'appeler directement la catégorie ID=21364 avec tous les liens menu déjà construits.
Haut

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.