SebastienSerre Posted July 7, 2015 Share Posted July 7, 2015 Bonjour J'ai sur mon site 2 transporteurs: TNT et envoimoinscher ainsi que la possibilité de retirer les produits à la boutique. Le choix de Mondial Relay via Envoimoinscher n'est proposé que lorsque le transporteur est ajouté dans la fiche produit coté BO. N'y a t'il pas moyen d'activer ce transporteur pour tous les produits de la boutique? merci d'avance Link to comment Share on other sites More sharing options...
SITOLOG - F Bugnet Posted July 8, 2015 Share Posted July 8, 2015 Bonjour, A ma connaissance, si aucun transporteur n'est associé à un produit, Prestashop considère que TOUS les transporteurs lui sont associés. Il semble donc que votre module Mondial Relay ne soit pas vraiment conforme à cette logique. Sinon pour répondre précisément à votre question, non il n'est pas possible en natif de faire de l'association en masse des transporteurs aux produits. Il existe des solutions payantes qui le permettent (me contacter en privé pour plus d'info), ou encore la solution de le faire avec une requête SQL si vous êtes un peu technique, de type INSERT INTO dans la table product_carrier. C'est assez simple, elle n'a que trois colonnes, id_product, id_carrier_reference et id_shop. La difficulté (nécessite de savoir faire une sous requete) : Il faut inserer une ligne par produit et donc ajouter ajouter une sous requête SELECT sur la table product qui va lire tous les identifiants produits. Crdlt Franck Link to comment Share on other sites More sharing options...
Modock Posted November 17, 2015 Share Posted November 17, 2015 (edited) Effectivement, avec une requete on peut faire ça, voici le détail : La table products contient la liste des produits,La table carrier contient la liste des transporteursLa table products_carrier contient le lien entre le produit et le transporteur. Autrement dit, quel transporteur peut être selectionné pour quel produit.Pour commencer, vérifiez que cette requete renvoie bien les transporteurs que vous voulez ajouter (tous les transporteurs actifs et non supprimés) select * from carrier where active=1 and deleted=0 Si vous voulez voir ce qui va être inséré, vous pouvez effectuer la requete suivante. Elle affiche l'ID de chaque produit associé à chaque transporteur. select p.id_product,c.id_reference from product p, carrier c where c.active=1 and c.deleted=0 Il y a la notion de magasin, par défaut cette valeur vaut 1. Avant tout, sauvegardez votre base de donnéesPour finir, la requete d'insertion sera : insert into product_carrier(id_product,id_carrier_reference,id_shop) select p.id_product,c.id_reference,1 from product p, carrier c where c.active=1 and c.deleted=0 Edited November 17, 2015 by Modock (see edit history) Link to comment Share on other sites More sharing options...
François38 Posted April 24, 2017 Share Posted April 24, 2017 (edited) Bonjour,Merci Modock pour la requête ! Pour ceux qui sont en multiboutique comme moi, voici la requête permettant d'intégrer les transporteurs en masse pour toutes les boutiques. insert into product_carrier(id_product,id_carrier_reference,id_shop) select p.id_product,c.id_reference,s.id_shop from product p, shop s, carrier c where c.active=1 and c.deleted=0 Comme le faisait remarquer Franck Bugnet, lorsqu'un produit n'a aucun transporteur de sélectionné, prestashop condière pour celui-ci que tous les transporteurs sont disponibles. De ce fait la requête SQL ci-dessus n'a pas grand intérêt en l'état.Par contre, pour ma part je l'ai utilisée pour ajouter tous les transporteurs sauf un (Lettre Suivie) que je veux pouvoir sélectionner uniquement pour quelques produits au cas par cas. Il n'est également pas utile d'exclure les transporteurs inactifs, car étant justement inactifs, ils ne seront pas disponibles (mais au moins le jour où vous le réactivez, pas besoin de revenir toucher la base).Voici donc la requête :Je prends donc tous les transporteurs qui ne sont pas supprimés et qui ne s'appellent pas 'Lettre Suivie' (on peut aussi filtrer avec l'ID). insert into product_carrier(id_product,id_carrier_reference,id_shop) select p.id_product,c.id_reference,s.id_shop from product p, shop s, carrier c where c.deleted=0 and and c.name!='Lettre Suivie' A+ Edited April 24, 2017 by François38 (see edit history) Link to comment Share on other sites More sharing options...
kokoon Posted August 3, 2017 Share Posted August 3, 2017 (edited) Bonjour, merci pour l'astuce elle vient de m'être très utile (même cas de figure que François38). Je suis sous 1.6.1.15. Le dernier bout de requête donné par François38 n'était pas bon chez moi, car mes tables ne se nomment pas pareil. Je voulais aussi écarter 3 transporteurs, par leur ID, donc voici le code qui a fonctionné : insert into ps_product_carrier(id_product,id_carrier_reference,id_shop) select p.id_product,c.id_reference,s.id_shop from ps_product p, ps_shop s, ps_carrier c where c.deleted=0 and c.id_carrier!=227 and c.id_carrier!=221 and c.id_carrier!=195 A+ Edited August 3, 2017 by kokoon (see edit history) Link to comment Share on other sites More sharing options...
Emmanuel Autin Posted March 20, 2018 Share Posted March 20, 2018 (edited) Pour ceux qui ne sont pas très familier ou débutant en sql et ce type d'insertion à partir du résultat d'un SELECT (comme moi ! ), dans le cas ou l'on souhaite seulement ajouter un nouveau transporteur pour l'ensemble du catalogue produit, il faut juste rajouter dans la clause WHERE l'id du carrier à ajouter(que vous trouverez dans la table ps_carrier). Notez qu'il ne faut qu'aucun produit du catalogue ne soit déjà assigné à ce transporteur via le backoffice pour que la requête puisse s'executer ou alors ajouter une condition dans votre requête pour ne pas appliquer l'update sur les produits déjà assignés au transporteur en question. INSERT into ps_product_carrier(id_product,id_carrier_reference,id_shop) SELECT p.id_product,c.id_reference,1 FROM ps_product p, ps_carrier c where c.active=1 and c.deleted=0 and c.id_carrier = 154 Merci en tout cas à ceux qui ont répondus. Je trouve étrange que PrestaShop ne propose pas, par défaut, ce type d'édition de masse en backoffice. Edited March 23, 2018 by Emmanuel Autin (see edit history) Link to comment Share on other sites More sharing options...
pixAN Posted March 25, 2018 Share Posted March 25, 2018 Bonjour , je suis interessé par le procédé, dans quel fichier faire cette requete ? J'ai regarder dans plusieurs fichiers (admincarriercontroller, adminproductcontroller) mais je ne trouve aucun lien avec la table "ps_product_carrier". Dans quel fichier est appelé la fonction? merci Link to comment Share on other sites More sharing options...
pixAN Posted March 25, 2018 Share Posted March 25, 2018 Je viens d'essayer simplement en creéant un fichier php et en mettant en place la requete. Cela fonctionne bien sauf que: Dans l'administration les transporteurs ne s'affichent pas dans la colonne "transporteur selectionné" , du coup on ne sait pas quel transporteur est associé.Est -il possible de les voir dans cette colonne? Cela m'emb^éte de devoir faire la requete dans un fichier que je vais du coup devoir appeler tous les jours via une tache cron. Est-possible de placer cette requete dans un fichier (controller ou classes) par exmple lors de la création du transporteur? Merci Link to comment Share on other sites More sharing options...
pixAN Posted March 26, 2018 Share Posted March 26, 2018 Bonjour, 1) J'ai résolu le problème de l'affichage dans l'administration, j'avais fait une modification du fichier AdminProductsController et je ne l'avais pas supprimé. 2) A votre avis tache cron obligatoire en sachant que dans ma requète je vérifie le poids du produit (si poids du produit est égale à2kh alors on affihce tel transporteur) , serait -t-il possible d'éviter une tache cron et de spécifier une condition dans un fichier (peut-être Product.php) ? Merci pour vos retours Link to comment Share on other sites More sharing options...
Emmanuel Autin Posted March 28, 2018 Share Posted March 28, 2018 (edited) Bonjour, Vous n'avez pas accès à la base de donnée ? La requête s'effectue simplement dans la table ps_product_carrier via l'onglet SQL de phpmyadmin. Le nouveau transporteur s'affiche dans la colonne de droite dans l'onglet livraison de chaque produit. Edited March 28, 2018 by Emmanuel Autin (see edit history) Link to comment Share on other sites More sharing options...
pixAN Posted March 28, 2018 Share Posted March 28, 2018 Si mais seulement mes produits sont quotidiemment rentrés dans via un import d'un fichier CSV . et jrentre des nouveaux produits très souvent.(cela peut être une cinquante) donc he cherche un moyen pour automatiser cette partie. Link to comment Share on other sites More sharing options...
kokoon Posted April 5, 2018 Share Posted April 5, 2018 (edited) Bonjour, je n'ai pas de réponse pour pixAN navré mais j'ai besoin d'un conseil pour la requête sql. Peut-on faire un "update" plutôt qu'un insert into ? Car j'ai déjà des données et j'ai logiquement des "duplicate entry". Quelqu'un aurait-il une soluce svp ? Edit : suffit de vider la table en fait, résolu. Edited April 10, 2018 by kokoon (see edit history) Link to comment Share on other sites More sharing options...
JoJo! Posted June 10, 2020 Share Posted June 10, 2020 On 3/20/2018 at 12:32 PM, Emmanuel Autin said: Pour ceux qui ne sont pas très familier ou débutant en sql et ce type d'insertion à partir du résultat d'un SELECT (comme moi ! ), dans le cas ou l'on souhaite seulement ajouter un nouveau transporteur pour l'ensemble du catalogue produit, il faut juste rajouter dans la clause WHERE l'id du carrier à ajouter(que vous trouverez dans la table ps_carrier). Notez qu'il ne faut qu'aucun produit du catalogue ne soit déjà assigné à ce transporteur via le backoffice pour que la requête puisse s'executer ou alors ajouter une condition dans votre requête pour ne pas appliquer l'update sur les produits déjà assignés au transporteur en question. INSERT into ps_product_carrier(id_product,id_carrier_reference,id_shop) SELECT p.id_product,c.id_reference,1 FROM ps_product p, ps_carrier c where c.active=1 and c.deleted=0 and c.id_carrier = 154 Merci en tout cas à ceux qui ont répondus. Je trouve étrange que PrestaShop ne propose pas, par défaut, ce type d'édition de masse en backoffice. Tu pourrais m'indiquer comment le faire pour seulement une catégorie ? Merci 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