angelflo Posted May 10, 2021 Share Posted May 10, 2021 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 More sharing options...
Eolia Posted May 10, 2021 Share Posted May 10, 2021 Il semblerait que votre import n'ait pas rempli les tables ps_xxxxxx_shop (category, product, etc...) normalement ça utilise Shop->copyShopData($old_id, $tables_import = false, $deleted = false) Link to comment Share on other sites More sharing options...
angelflo Posted May 11, 2021 Author Share Posted May 11, 2021 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 Link to comment Share on other sites More sharing options...
angelflo Posted May 11, 2021 Author Share Posted May 11, 2021 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 More sharing options...
Eolia Posted May 11, 2021 Share Posted May 11, 2021 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 More sharing options...
angelflo Posted May 11, 2021 Author Share Posted May 11, 2021 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 More sharing options...
Eolia Posted May 11, 2021 Share Posted May 11, 2021 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 More sharing options...
angelflo Posted May 11, 2021 Author Share Posted May 11, 2021 (edited) 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 May 11, 2021 by angelflo (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted May 11, 2021 Share Posted May 11, 2021 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 More sharing options...
angelflo Posted May 11, 2021 Author Share Posted May 11, 2021 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now