Récemment


Mes catégories ne s'affichent plus correctement et impossible d'associer un produit



  • Mes catégories s'affichent bien en back-office mais rien ne fonctionne en front office et les associations produit/catégories ne fonctionnent pas, que faire ?​



  • Parfois Prestashop ne répond plus correctement au niveau de l'affichage ou association des catégories. Le problème vient généralement de la base de données où les tables ne sont plus "en ordre". Le but de ce post est de vous expliquer le fonctionnement et pouvoir le réparer si vous n'avez pas trop de catégories (Dans le cas contraire, des professionnels sont à votre service ! :))

    Plusieurs choses à savoir/comprendre :

    (Les explications sont données ici pour du mono-boutique)

    Vous devez avoir dans ps_category ces 2 premières lignes qui concernent la catégorie Root et Accueil. Root est invisible mais obligatoire.

    id_category id_parent id_shop_default level_depth nleft nright active date_add date_upd position is_root_category
    1 0 1 0 1 22 1 2014-02-27 04:28:50 2014-02-27 04:28:50 0 0
    2 1 1 1 2 21 1 2014-02-27 04:28:50 2014-02-27 04:28:50 0 1

    root (id=1) doit avoir 0 en is_root_category.

    Accueil(id=2) DOIT être en 1

    Si vous n'êtes pas sûr des noms des catégories, regardez dans ps_category_lang

    Vérifiez dans ps_configuration que l'id home est correct (PS_HOME_CATEGORY = 2)

    Vérifiez le également dans ps_shop (id_category = 2)

    Dessinez sur une feuille l'arbre de vos catégories avec leur nom et leur id (autrement vous allez vite être perdus^^)

    Il faut comprendre que les nleft et nright encadrent chaque catégorie, qu'ils sont uniques et se suivent sans trous !

    Root encadre l'ensemble.

    Pour l'instant vous savez qu'elle démarre à 1.

    Comptez le nombre de lignes dans cette table et multipliez le par 2, vous aurez le nright max.

    Dans l'exemple ci-dessus la catégorie va de 1 à 22

    La catégorie Accueil encadre également l'ensemble, juste après root

    Donc elle démarre à 2 à gauche et termine à 21 (dans l'exemple)

    Ensuite, et c'est là qu'on commence à s'amuser, il faut repérer les sous-catégories en différenciant celles qui ont également des sous-catégories.

    Exemple simple avec une sous-catégorie seule. (id=3, nom Test1)

    Cette catégorie va donc commencer à 3 en nleft et aller à 4 en nright (Elle s'encadre elle-même^^) avec 2 comme id_parent (Accueil pour ceux qui n'ont pas suivi)

    Ainsi de suite pour toutes les catégories simples.

    Pour une catégorie (id=4, nom Test2) avec sous-catégorie, on ne rempli pour l'instant que nleft. Le dernier n utilisé étant 4, ici nleft sera 5, son id_parent sera 2  (Accueil, toujours pour ceux qui n'ont pas suivi)

    1ère sous-catégorie de cette catégorie:

    id_parent = 4 (logique)

    nleft = 6 et si pas de sous-catégorie, nright = 7

    Idem pour les suivantes. Arrivés à la dernière, par exemple id= 8, id_parent=4, nleft = 12 et nright = 13 on peut donc connaitre le nright de la catégorie parente qui sera donc 14 (si vous avez suivi)

    Ainsi de suite pour toutes vos catégories/sous-catégories.

    le dernier nright doit correspondre à celui de l'accueil - 1

    Certains vont me dire, surtout ceux qui suivent, que je n'ai rien dit concernant la colonne level_depth. Cette colonne correspond à la profondeur de la catégorie depuis root.

    Donc facile à remplir:

    Root profondeur = 0

    Accueil = 1

    Toutes les catégories de 1er niveau = 2 et ainsi de suite.

    Bon on a fait le principal mais il reste des choses à vérifier.

    Dans ps_category_lang, contrôler le nombre et les id des catégories et s'assurer qu'ils correspondent bien à ceux de ps_category.

    Dans ps_category_group vérifier que les catégories sont bien accessibles à chaque groupe client (sauf root qui a juste un groupe 0)

    Dans ps_category_shop vérifier que toutes vos catégories sont bien présentes pour l'id_shop 1

    Dans ps_category_product, pas évident à contrôler comme ça, il suffira de vérifier pour chaque produit sa ou ses associations.

    Je ne vous ai pas parlé des positions, car c'est très simple à remettre en place dans votre BO par simple glisser/déposer^^

    Voilà pour ceux qui voulaient comprendre le fonctionnement et éventuellement réparer leur tables. Faites ça au calme, avec un arbre dessiné comme expliqué plus haut et tout devrait rentrer dans l'ordre.

    Evidemment, si vous avez 5000 catégories ça ne va pas être une partie de plaisir...

    Personnellement, je commence par reconstruire les catégories principales, puis j'importe par série et je contrôle à chaque import.

    Bon courage :)


  • legacy

    Parfois c'est tout bêtement le cache Prestashop qu'il faille vider .
    ( surtout les modules catégories qui sont concernés)


Se connecter pour répondre