Jump to content

Bug multisites ??


Recommended Posts

Bonjour à tou(te)s,

Je tente de migrer de magento vers prestashop pour voir si cette solution e-commerce est plus fiable que magento2.

Par contre j'utilise le multisite et j'ai donc activé cette fonction sous magento 1.7.7.4 (derniere version stable en date)

Après la migration , j'ai bien mes différents sites web dans la table ps_shop avec chaque site ayant son propre shop ID => jusque là tout va bien et c'est logique.

 

Lorsque je vais dans l'admin >> Catalogue >> Produits et que je choisi d'afficher les articles pour "Tous les boutiques" (parametre de visibilité situé en haut) : je m'attend donc logiquement à retrouver tous mes produits indépendamment de toute notion de site (comme cela est le cas sous magento et avec lequel je n'ai jamais eu de pb à ce niveau là)

=> Mais sous prestashop le resultat de la liste de produits ne m'affiche que les produits rattachés au site shop ID 1 !!!

Lorsque j'étudie la requete SQL qui retourne la liste de produit je constate que j'ai bien une recherche spécifique sur un shop ID avec par exemple :

LEFT JOIN `ps_shop` shop ON (shop.id_shop = 1)

 

Comment cela est il possible ? y a t'il quelque chose que je ne comprend pas dans la logique multiboutique de PS ou s'agit t'il d'un BUG ?? car clairement quand on choisi comme paramètre d'affichage  "All Shops" (Toutes les boutiques) il me semblerait assez logique que la liste des produits retourne tous les produits de tous les sites web

Si quelqu'un à une explication à ce problème je vous remercie par avance ! :-)

Bonne soirée

Link to comment
Share on other sites

Bonjour Eolia,

Tout d'abord merci bcp pour votre réponse.

Je ne suis pas sur de comprendre votre réponse.

Parle t'on bien de la meme chose : voici ce que j'ai dans le backoffice de prestashop qui tourne avec la derniere version

1/ je suis en mode "All Shops" pour afficher l'intégralité des produits

2/ je clique sur "Voir la requete SQL" pour voir comment prestashop requete la liste des produits et je constate qu'il utilise un shop id spécifique à savoir : shop_id  1 pour retourner la liste des produits.

Mon but n'étant pas d'associer tous les produits au Shop ID 1 puisque ce shop correspond à une boutique spécifique et que j'ai pris le soin d'associer une catégorie racine différente pour chacune de mes boutiques

 

screenshot2021.05.11-06_02_56.png

Link to comment
Share on other sites

n'étant pas expert prestashop car je viens de me lancer sur cette plateforme mais ayant une connaissance en SQL, de ce que j'en vois la requete logique pour retourner la liste des produits lorsque je suis en visibilité "All Shops"  me semblerait etre la suivante :

Dans la requete SQL actuelle la partie :

JOIN `ps_product_shop` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = 1)

devrait plutôt être :

JOIN `ps_product_shop` sa ON (p.`id_product` = sa.`id_product`)

 

et

LEFT JOIN `ps_shop` shop ON (shop.id_shop = 1)

devrait plutôt être :

 LEFT JOIN `ps_shop` shop ON (shop.id_shop = p.id_shop_default)

 

En faisant un test SQL direct dans phpmyadmin avec ces modifications, je retrouve bien l'ensemble de mes produits ...

Donc ma question reste entière au sujet de Prestashop 1.7.7.4 et de la requete qu'il utilise pour retourner la liste des produits lorsque on utilise le multiboutique

Link to comment
Share on other sites

Ah ben non, je n'en sais rien concernant la version 1.7 de Prestashop, j'ai arrêté d'essayer de comprendre et on est resté en 1.6.

En 1.6 la requête en all shops est la suivante

SELECT a.`id_product`, b.`name` AS `name`, `reference`, a.`price` AS `price`, sa.`active` AS `active` , shop.`name` AS `shopname`, a.`id_shop_default`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, sa.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger` 
FROM `ps_product` a 
LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = a.id_shop_default) 
LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop_group = 1 AND sav.id_shop = 0 )
JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) 
LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default) 
LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default) 
LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default) 
LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`) 
LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product` AND pd.`active` = 1) 
WHERE 1
ORDER BY a.`id_product` asc 
LIMIT 0, 50

Au début des 1.7 ils avaient complètement viré le multishop car celui-ci ne fonctionnait plus. Il a été remis mais pas sûr que ceux qui l'ont codé maîtrisent parfaitement le sujet...

Link to comment
Share on other sites

merci beaucoup pour avoir pris le temps de me répondre et pour m'afficher votre requête de la v 1.6 qui elle semble correcte.

bon du coup j'avoue être très inquiet sur une possible migration de magento vers prestashop quand je vois des bugs aussi énorme que çà dès le début de l'install :-((

si je comprends bien j'ai le choix entre downgrader sur une version de prestashop obsolète (1.6)

=> car la version 1.7 est tout de meme sortie depuis 2016 donc j'en déduis que si en 5 ans d'existence leur version 1.7 ne gère toujours pas le multisite cela n'est pas prêt de s'améliorer

ou faire le choix de rester sous magento pour avoir une plateforme qui fonctionne pour le multisites ?

Link to comment
Share on other sites

Obsolète ne veut pas dire non stable et non fonctionnelle.

Je gère une 50aine de boutiques, toutes sous 1.6.1.24 ou inférieur.

Pour info, avec la 1.7 et l'usine d'intégration Symfony, on est passé de 300 000 lignes de code à 1 millions de lignes pour moins de fonctionnalité et une grande perte de stabilité.

Link to comment
Share on other sites

on est d'accord ... sur ce principe mon magento 1 fonctionne aussi très bien et je voulais justement éviter l'usine à gaz qu'es devenu magento2

mais on en revient au meme probleme PS 1.6 ou magento 1 sont des versions obsolètes et donc non maintenues, de nombreuses failles de sécurités et des attaques de plus en plus fréquentes sur les solutions ecommerce de type PS ou magento ... donc continuer à tourner sur une version obsolète expose tous les jours davantage à des risques majeurs de hack, attaques XSS, etc ... 😞

Edited by angelflo (see edit history)
Link to comment
Share on other sites

Non.

Magento vous impose la version 2 car les modules de paiement DSP2 ne sont pas compatible avec la version 1

Aucun fichier cœur de Prestashop n'a jamais permis un hack, ceux-ci sont TOUJOURS venus des modules tiers et la 1.7 n'empêche pas cela.

Link to comment
Share on other sites

A tout hasard savez-vous ou se situe le fichier qui génère la requete du backoffice pour requeter la liste des produits ?

Pour etre plus clair => ou peut on trouver le fichier responsable du SQL suivant :

SELECT SQL_CALC_FOUND_ROWS p.`id_product`  AS `id_product`,
 p.`reference`  AS `reference`,
 sa.`price`  AS `price`,
 p.`id_shop_default`  AS `id_shop_default`,
 p.`is_virtual`  AS `is_virtual`,
 pl.`name`  AS `name`,
 pl.`link_rewrite`  AS `link_rewrite`,
 sa.`active`  AS `active`,
 shop.`name`  AS `shopname`,
 image_shop.`id_image`  AS `id_image`,
 cl.`name`  AS `name_category`,
 0 AS `price_final`,
 pd.`nb_downloadable`  AS `nb_downloadable`,
 sav.`quantity`  AS `sav_quantity`,
 IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`
FROM  `ps_product` p
 LEFT JOIN `ps_product_lang` pl ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = 1 AND pl.`id_shop` = 1)
 LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = p.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop_group = 1  AND sav.id_shop = 0 )
 JOIN `ps_product_shop` sa ON (p.`id_product` = sa.`id_product` AND sa.id_shop = 1)
 LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = 1)
 LEFT JOIN `ps_category` c ON (c.`id_category` = cl.`id_category`)
 LEFT JOIN `ps_shop` shop ON (shop.id_shop = 1)
 LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = 1)
 LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
 LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = p.`id_product`)
WHERE (1 AND state = 1)
 
ORDER BY  `id_product` asc
 
LIMIT 0, 20

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...